Постраничная навигация для MODX

Короткий ответ: если проект уже использует pdoTools, пагинацию сегодня логичнее делать через pdoPage. Он быстрее, удобнее и лучше вписывается в современную MODX-сборку. Старый вариант на getPage + getResources тоже оставим, но честно спустим вниз как legacy-подход, который еще можно встретить на старых проектах.

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

Основной вариант: pdoPage + pdoResources

Если у вас установлен pdoTools, то это обычно лучший старт.

[ [!pdoPage?
&element=`pdoResources`
&parents=`17`
&tpl=`articleTpl`
&limit=`10`
&includeTVs=`1`
&sortby=`publishedon`
&sortdir=`DESC`
]]
<ul class="pagenav">[ [!+page.nav]]</ul>

Чанк articleTpl

<article class="post">
Дата публикации: [ [+publishedon:strtotime:date=`%d.%m.%Y`]]
<h2><a href="[ [~[ [+id]]]]">[ [+pagetitle]]</a></h2>
[ [+introtext]]
</article>

Почему pdoPage удобнее

  • обычно быстрее на больших выборках;
  • логично живет рядом с pdoResources;
  • хорошо вписывается в современные сборки на pdoTools;
  • проще масштабировать, если потом понадобится AJAX-пагинация или более сложный вывод.

Базовые стили пагинации

.pagenav {display:flex;flex-wrap:wrap;gap:8px;list-style:none;padding:0;margin:20px 0 0;}
.pagenav li {display:inline-flex;}
.pagenav li a {padding:8px 12px;border:1px solid #bebebe;border-radius:8px;color:#1d8bce;font-weight:700;text-decoration:none;}
.pagenav li .active {border-color:#949494;color:#1d8bce;font-weight:700;}

Подводные камни у современного варианта

  • Если у проекта нет pdoTools, сначала ставим его, потом уже зовем pdoPage.
  • Лучше сортировать по publishedon, а не по createdon, если реально важен порядок публикации, а не дата рождения ресурса.
  • Если у вас тяжелые TV и криво собранный запрос, чудес не будет даже с pdoPage. Он хороший, но не колдун.

Устаревший, но еще рабочий вариант: getPage + getResources

Ниже тот самый старый рецепт, который еще можно держать на проектах, где все давно собрано на getResources и никто пока не планирует пересобирать половину шаблонов.

<div class="content">
[ [!getPage?
&element=`getResources`
&parents=`17`
&tpl=`articleTpl`
&limit=`10`
&includeTVs=`1`
&pageFirstTpl=`<li class="control"><a href="[ [+href]]">Первая</a></li>`
&pageLastTpl=`<li class="control"><a href="[ [+href]]">Последняя</a></li>`
]]
<ul class="pagenav">[ [!+page.nav]]</ul>
</div>

Этот вариант не надо выкидывать в мусор только потому, что ему не 18. Но новым базовым сценарием я бы его уже не делал.

Что выбрать на практике

  • pdoPage + pdoResources — если проект современный или уже сидит на pdoTools.
  • getPage + getResources — если проект старый, живой и вы не хотите сейчас лезть в миграцию ради одной пагинации.

Связанные статьи

Актуально для: MODX Revolution 2.8+, MODX 3.x, pdoTools/pdoPage для современного варианта, getPage для legacy-проектов.

Комментарии


Комментарии (0)



Разрешённые теги: <b><i><br>Добавить новый комментарий: