Pagelist

Плагин позволяет формировать выборки элементов модуля Page для создания виджетов, разделов страниц, пользовательских блоков и элементов навигации

#1. Назначение плагина

Плагин Pagelist представляет собой универсальное решение для создания виджетов, виртуальных разделов и навигации. При помощи плагина Pagelist реализуются следующие возможности:

  • вывод новостной ленты без ограничения по родительскому разделу с настраиваемой паджинацией, сортировкой и условием выбора элементов
  • создание виджетов типа «Новые страницы», «Лучшие страницы», «Случайные страницы» и проч. с настраиваемой сортировкой и условием выбора элементов
  • создание элементов навигации и формирование любых пользовательских блоков на базе модуля Pages
  • опциональная генерация пользовательских тегов
  • опциональная генерация количества комментариев к странице через {PAGE_ROW_ID|cot_comments_count('page', $this)|cot_declension($this, 'Comments')}
  • опциональная связь с плагином рейтингов (Star Ratings)

Плагин представляет собой функцию pagelist и используется через ее обратный вызов (callback):

function pagelist(
    $tpl = 'pagelist',
    $items = 20,
    $order = 'page_date DESC',
    $condition = '',
    $cat = '',
    $blacklist = '',
    $whitelist = '',
    $sub = true,
    $pagination = 'pld',
    $noself = false,
    $offset = 0
)

Парметры вызова следующие:

  1. $tpl - код шаблона (без расширения, напр. pagelist.recentitems)
  2. $items - количество выводимых элементов (опционально, например 5)
  3. $order - порядок сортировки (опционально, например page_date DESC)
  4. $condition - условие выборки (опционально, например page_some-extrafield = “1”)
  5. $cat- родительская категория (опционально, например blog)
  6. $blacklist - «черный список» категорий (опционально, через точку с запятой, например system;some-cat)
  7. $whitelist - «белый список» категорий (опционально, через точку с запятой, например hot;podcasts)
  8. $sub - включить подкатегории (опционально, например true)
  9. $pagination - имя параметра паджинации (опционально, например pld – убедитесь в отсутствии конфликтов одинаковых имен!)
  10. $noself - исключить текущую страницу из выборки (опционально, например true)
  11. $offset - сдвиг в запросе для страниц (1 -- все, кроме последней, 2 -- все, кроме двух последних и т. д.)

#2. Примеры использования:

Как уже упоминалось, плагин использует функцию pagelist для отрисовки собственного шаблона в указанном месте. Благодаря этому плагин позволяет формировать такие блоки, как лента блогов, виджеты "Recent Items", "Top Items" и проч.

Вывод ленты блогов – выводятся все разделы, исключая system и archives с сортировкой по убывания даты и с формированием паджинации по 8 позиций на страницу:

{PHP|pagelist('pagelist.blog','8','page_date DESC','','','system;archives','','TRUE')}

Вывод виджета Топ-3 – три страницы с ненулевыми просмотрами, с сортировкой по убыванию просмотров и исключая раздел system:

{PHP|pagelist('pagelist.top','3','page_count DESC','page_count != "0"','','system')}

Вывод блока «О сайте» – страница с алиасом about из раздела system:

{PHP|pagelist('pagelist.about','','','page_alias = "about"','system')}

#3. Формат шаблона

Типовой TPL-шаблон имеет следующий формат:

<!-- BEGIN: MAIN -->
    <ul>
<!-- BEGIN: PAGE_ROW -->
        <li><a href="{PAGE_ROW_URL}">{PAGE_ROW_TITLE}</a></li>
<!-- END: PAGE_ROW -->
    </ul>
 
<!-- IF {PAGE_TOP_PAGINATION} -->
    <div class="pagination">
        {PAGE_TOP_PAGEPREV} {PAGE_TOP_PAGINATION} {PAGE_TOP_PAGENEXT}
    </div>
<!-- ENDIF -->
 
<!-- END: MAIN -->

Для вывода используется регулярный блок PAGE_ROW, в котором при помощи функции cot_generate_pagetags() формируются "страничные" теги с префиксом PAGE_ROW_.

Дополнительно доступны теги:

  • {PAGE_ROW_NUM} (порядковый номер элемента)
  • {PAGE_ROW_ODDEVEN} (чет / нечет)
  • {PAGE_ROW_RAW} (выводит сырые данные строки из базы в формате {PAGE_ROW_RAW.page_alias})

При включении в настройках плагина связи с плагином Comments, доступными становятся теги PAGE_ROW_COMMENTS и PAGE_ROW_COMMENTS_COUNT.

Обсудить на форумах: плагин Pagelist или форкнуть на Гитхабе


1. CrazyFreeMan  19.01.2014 09:28

Подскажите как выводить список новостей просто с TITLE новости, а то у меня получается хлебные крошки:

1. категория / подкатегория / новость

хочу получить 

1. новость

 

Спасибо

2. CrazyFreeMan  19.01.2014 09:41

Нашел PAGE_ROW_SHORTTITLE 

3. pasha_link  17.11.2015 06:08

Как выводить все, кроме самого последнего поста категории?

4. Kort  08.12.2015 14:37

Наверно для такого лучше всего написать свой миниплагин )

5. Chiaroscuro  16.03.2016 09:00

Как на счет кеширования информации?

6. Macik  22.03.2016 23:54

For more complex needs you can use `cot_page_enum()` function (available for Cotonti 0.9.19 Page API)

7. Kort  19.08.2016 06:50

Плагин обновился: добавилась опция offset (по просьбе pasha_link)

8. CrazyFreeMan  29.10.2016 07:17

 как пользоватся i18n ? А то перевод есть, в запросе вижу выборку но на странице показывает основной язык а не перевод

9. CrazyFreeMan  29.10.2016 08:04

Для корректной работы перевода у себя вот тут добавил:

global $i18n_enabled, $i18n_read;
$i18n_enabled = $i18n_read && cot_i18n_enabled($row['page_cat']);

Добавление комментариев доступно только зарегистрированным пользователям