Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Форум Модули DIAFAN.CMS Статьи Что поправить в модуле, чтобы вывести список категорий для статьи?


Александр Фриман (aleksandr-friman) 07 декабря, пятница

Добрый день! Использую <insert name="show_block" module="clauses"> для вывода статей. В этом случае не предусмотрен вывод родительских категорий. Подскажите, пожалуйста, что нужно поправить в модуле, чтобы в массиве передавался список категорий для статьи.

Андрей (R4W) 5107 декабря, пятница

Вам название категории надо передавать и ссылку на категорию?

Александр Фриман (aleksandr-friman) 07 декабря, пятница

да

Андрей (R4W) 5107 декабря, пятница

modulesclausesclauses.model.php

функция show_block для названий ID категорий надо будет запросик дописать, а для получения ссылок рекуоменду использовать метод link

https://www.diafan.ru/dokument/full-manual/developers/api/route/

Александр Фриман (aleksandr-friman) 09 декабря, воскресенье, редакция 09 декабря, воскресенье

Ок, используя метод ling я получаю ссылку на основную категорию
$this->diafan->_route->link($cat["site_id"], $cat["id"], 'clauses', 'cat');

Александр Фриман (aleksandr-friman) 09 декабря, воскресенье

Написал запрос, вроде верно. Но почему-то названия статей заменились на названия категорий.

Александр Фриман (aleksandr-friman) 09 декабря, воскресенье, редакция 09 декабря, воскресенье

SELECT e.id, e.name1 AS name,e.anons1 AS anons, e.timeedit, e.site_id, e.created, e.cat_id, c.name1 AS name FROM `diafan_clauses` AS e, `diafan_clauses_category` AS c WHERE c.id = e.cat_id AND e.act1='1' AND e.trash='0' AND e.created<1544389140 AND e.date_start<=1544389140 AND (e.date_finish=0 OR e.

вот сам запрос. Вся проблема из-за одинаковых алиасов. что можно сделать?

Александр (capitan) 9209 декабря, воскресенье, редакция 09 декабря, воскресенье

Код
SELECT e.id, e.name1 AS name,e.anons1 AS anons, e.timeedit, e.site_id, e.created, e.cat_id, c.name1 AS name FROM `diafan_clauses` AS e, `diafan_clauses_category` AS c WHERE c.id = e.cat_id AND e.act1='1' AND e.trash='0' AND e.created<1544389140 AND e.date_start<=1544389140 AND (e.date_finish=0 OR e.

name как минимум должны быть разные

name_cat, name_elem

Александр Фриман (aleksandr-friman) 09 декабря, воскресенье, редакция 09 декабря, воскресенье

я понимаю, ну а как можно поменять? Этот запрос мне показывает diafan. Сам запрос с php прикрепил на скрине выше.

Александр (capitan) 9209 декабря, воскресенье

вы же сами определили название, когда написать AS name, значит в массиве придет $row["name"] = "XXX", а так как вы второй раз определили ключ для названия такой же, то $row["name"] заменяется уже названием категории, хотя бы так

Код
SELECT e.id, e.name1 AS name,e.anons1 AS anons, e.timeedit, e.site_id, e.created, e.cat_id, c.name1 AS name_cat FROM `diafan_clauses` AS e, `diafan_clauses_category` AS c WHERE c.id = e.cat_id AND e.act1='1' AND e.trash='0' AND e.created<1544389140 AND e.date_start<=1544389140 AND (e.date_finish=0 OR e.


и будет $row["name"] - название элемента, а $row["name_cat"] - категории

Александр (capitan) 9209 декабря, воскресенье

а тут не так должно быть?

e.created>1544389140 AND e.date_start>=1544389140

хотя от задачи зависит

Александр Фриман (aleksandr-friman) 09 декабря, воскресенье

Видимо вы меня не поняли. Вот запрос из модуля статей, блок show_block:
$rows = DB::query_range_fetch_all(
"SELECT e.id, e.[name], e.[anons], e.timeedit, e.site_id, e.created, e.cat_id, c.[name] FROM {clauses} AS e, {clauses_category} AS c".$inner.($this->diafan->configmodules('where_access_element', 'clauses') ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='clauses' AND a.element_type='element'" : "")." WHERE c.id = e.cat_id AND e.[act]='1' AND e.trash='0' AND e.created<%d".($this->diafan->_site->module == 'clauses' && $this->diafan->_route->show ? " AND e.id<>".$this->diafan->_route->show : '')." AND e.date_start<=%d AND (e.date_finish=0 OR e.date_finish>=%d)".$where.($this->diafan->configmodules('where_access_element', 'clauses') ? " AND (e.access='0' OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id.")" : '')." GROUP BY e.id" .$order,$time, $time, $time,$sort == "rand" ? $rand : 0,$sort == "rand" ? 1 : $count);
Где я здесь могу задать алиас?

Александр (capitan) 9209 декабря, воскресенье

SELECT e.id, e.[name] AS name, e.[anons], e.timeedit, e.site_id, e.created, e.cat_id, c.[name] AS name_cat FROM {clauses} AS e, {clauses_category}

Александр Фриман (aleksandr-friman) 09 декабря, воскресенье

Спасибо огромное, сам не мог додуматься