Вывод новостей сразу в нескольких новостных лентах — различия между версиями
| Mad grant (обсуждение | вклад) | Mad grant (обсуждение | вклад)  | ||
| Строка 20: | Строка 20: | ||
| == Описание макроса == | == Описание макроса == | ||
| + | |||
| + | %news customNewsList()% — выводит новости из выбранной ленты и новости из всех лент новостей, у которых в поле типа "ссылка на дерево" с идентификатором 'rubric_link' | ||
| + | указана выбранная лента. | ||
| + | |||
| + | '''Параметры: customNewsList($elementPath,[$template = "default", $per_page = false, $ignore_paging = false])''' | ||
| + | |||
| + | '''$elementPath''' | ||
| + |    Принимает id или путь до ленты новостей, новости из которой будут выводиться макроса | ||
| + | '''$template ''' | ||
| + |    Принимает имя шаблона, по которому выводится результат макроса. В XSLT-шаблонизаторе игнорируется. | ||
| + | '''$per_page ''' | ||
| + |    Принимает число, которое обозначает максимальное количество новостей. Если этот параметр не указывать, будет взято значение, указанное в настройках модуля «Новости». | ||
| + | '''$ignore_paging ''' | ||
| + |    Принимаем булево значение («1» или «0»), указывающее макросу игнорировать значение текущей страницы списка вывода (параметр http-запроса p). То есть, если указать «1»,  | ||
| + |    макрос будет всегда выводить только первую страницу списка новостей  | ||
| + | |||
| + | Для применения этого макроса скопируйте содержимое листинга макроса в файл /classes/modules/news/__custom.php, и не забудьте указать имя метода в permissions.custom.php. | ||
| + | |||
| == Листинг макроса == | == Листинг макроса == | ||
| == Применение в xslt == | == Применение в xslt == | ||
| == Применение в tpl == | == Применение в tpl == | ||
Версия 13:30, 23 октября 2013
Актуально для версии 2.9.1
Содержание
Задача
Иногда необходимо, чтобы одна и та же новость отображалась в нескольких лентах новостей, стандартными средствами можно создавать виртуальные или просто копии новости и перетаскивать их через модуль "Структура" по нужным разделам, а если на сайте сложная структура новостных лент, это не совсем удобно.
Поэтому, нам нужно реализовать функционал, который позволит указывать на странице конкретной новости, в каком разделе её выводить.
Решение
Со стороны административной панели, нам понадобиться создать в типе данных 'Новость' поле типа "ссылка на дерево" с идентификатором 'rubric_link', все эти действия производятся в модуле "Шаблоны данных", в результате мы получим примерно следующее:
Теперь мы можем у каждой новости указать раздел для вывода:
Разделы мы указали, теперь нам понадобиться кастомный макрос, который будет выводить новости из конкретной ленты новостей, плюс новости из всех лент, у которых в поле с идентификатором 'rubric_link' выбрана эта лента новостей. Код данного макроса и его описание даны ниже.
Описание макроса
%news customNewsList()% — выводит новости из выбранной ленты и новости из всех лент новостей, у которых в поле типа "ссылка на дерево" с идентификатором 'rubric_link' указана выбранная лента.
Параметры: customNewsList($elementPath,[$template = "default", $per_page = false, $ignore_paging = false])
$elementPath
Принимает id или путь до ленты новостей, новости из которой будут выводиться макроса
$template
Принимает имя шаблона, по которому выводится результат макроса. В XSLT-шаблонизаторе игнорируется.
$per_page
Принимает число, которое обозначает максимальное количество новостей. Если этот параметр не указывать, будет взято значение, указанное в настройках модуля «Новости».
$ignore_paging
Принимаем булево значение («1» или «0»), указывающее макросу игнорировать значение текущей страницы списка вывода (параметр http-запроса p). То есть, если указать «1», макрос будет всегда выводить только первую страницу списка новостей
Для применения этого макроса скопируйте содержимое листинга макроса в файл /classes/modules/news/__custom.php, и не забудьте указать имя метода в permissions.custom.php.


