Вывод новостей сразу в нескольких новостных лентах

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.1

Задача

Иногда необходимо, чтобы одна и та же новость отображалась в нескольких лентах новостей, стандартными средствами можно создавать виртуальные или просто копии новости и перетаскивать их через модуль "Структура" по нужным разделам, а если на сайте сложная структура новостных лент, это не совсем удобно.

Поэтому, нам нужно реализовать функционал, который позволит указывать на странице конкретной новости, в каком разделе её выводить.

Решение

Со стороны административной панели, нам понадобиться создать в типе данных 'Новость' поле типа "ссылка на дерево" с идентификатором 'rubric_link', все эти действия производятся в модуле "Шаблоны данных", в результате мы получим примерно следующее:

News data type.png

Теперь мы можем у каждой новости указать раздел для вывода:

Tree.png

Разделы мы указали, теперь нам понадобиться кастомный макрос, который будет выводить новости из конкретной ленты новостей, плюс новости из всех лент, у которых в поле с идентификатором '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.

Листинг макроса

Применение в xslt

Применение в tpl