Короткий ответ: если проект уже использует 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)