Война с pdoPage
Добрый день!
Совсем чего-то я запутался с pdoPage. Главное, что на основном сайте разбиение на страницы у меня работает (надеюсь, что правильно). Решил добавить небольшой апендикс к сайту, настраиваю там pdoPage, никак не хочет рабоать как надо.
Вызываю так:
Сниппет LIST:
Чанк PAGE_NAVI:
Страниц, которые должны вывестись сейчас 11. На первый взгляд всё работает, но при ближайшем рассмотрении оказывается, что выводится только две страницы. На первой выводятся ссылки на то количество страниц, какой задан лимит, а на второй последняя, 11-я страница. Остальные пропадают. Куда копать не понимаю.
Еще, забыл. Чанк вывода tpl_List
И еще, Василий писал, что можно организовать нумерацию с помощью плейсхолдера [[+idx]]. Но куда его присунуть? Пробовал в tpl_List вставить, не прокатывает. А с @INLINE не разобрался :-(
Совсем чего-то я запутался с pdoPage. Главное, что на основном сайте разбиение на страницы у меня работает (надеюсь, что правильно). Решил добавить небольшой апендикс к сайту, настраиваю там pdoPage, никак не хочет рабоать как надо.
Вызываю так:
[[!pdoPage?
&element=`LIST`
&pageLimit=`9`
&tplPageActive = `@INLINE <li class="active">[[+pageNo]]</li>`
&tplPageFirst = `@INLINE <li class="control"><a href="[[+href]]">Начало</a></li>`
&tplPageFirstEmpty = ``
&tplPageLast = `@INLINE <li class="control"><a href="[[+href]]">Конец</a></li>`
&tplPageLastEmpty = ``
&tplPagePrevEmpty = ``
&tplPageNextEmpty = ``
]]
[[!$PAGE_NAVI?]]
Сниппет LIST:
$parentID = 8073;
$placeholders = array();
$tpl_List = 'tpl_List';
$output = "";
//---------------------------------------------------------
$criteria = $modx->newQuery('modResource');
$criteria->select(array('modResource.id','modResource.pagetitle'));
$criteria->where(
array(
'parent' => $parentID,
'deleted' => 0
)
);
$criteria->sortby('modResource.publishedon','DESC');
$total = $modx->getCount('modResource',$criteria);
$totalVar = $modx->getOption('totalVar', $scriptProperties, 'total');
$modx->setPlaceholder($totalVar,$total);
$limit = $modx->getOption('pageLimit',$scriptProperties,10);
$offset = $modx->getOption('offset',$scriptProperties,0);
$criteria->limit($limit,$offset);
$all = $modx->getCollection('modResource',$criteria);
//----------------------------------------------------------
foreach($all as $value) {
$placeholders['link'] = $value->id;
$placeholders['pagetitle'] = $value->pagetitle;
$output .= $modx -> getChunk($tpl_List, $placeholders);
}
return $output;
Чанк PAGE_NAVI:
<div class="pagenavi">
<div class="pagecount">Страница [[+page]] из [[+pageCount]]</div>
<ul class="pageList">[[!+page.nav]]</ul>
</div>
Страниц, которые должны вывестись сейчас 11. На первый взгляд всё работает, но при ближайшем рассмотрении оказывается, что выводится только две страницы. На первой выводятся ссылки на то количество страниц, какой задан лимит, а на второй последняя, 11-я страница. Остальные пропадают. Куда копать не понимаю.
Еще, забыл. Чанк вывода tpl_List
<a href="[[+link]]">[[+pagetitle]]</a>
смотрел по документации, там в примерах можно такой коротенький запихнуть в параметр &tpl = `@INLINE <a href="[[+link]]">[[+pagetitle]]</a>
`
но я не совсем (точнее совсем) не разобрался, как к нему потом обращаться, как его вызывать.И еще, Василий писал, что можно организовать нумерацию с помощью плейсхолдера [[+idx]]. Но куда его присунуть? Пробовал в tpl_List вставить, не прокатывает. А с @INLINE не разобрался :-(
Комментарии: 8
Спасибо за ссылочку. Я так понимаю, что это описание первой реализации pdoTools. Сейчас же есть pdoPage.
Мне бы только разобраться, почему у меня выводится только: на странице №1 количество записей = limit, а на странице №2 последняя запись. Если поставить limit=3, то выведутся на странице №1 три записи, а на странице №2 запись №11. Ну и, было бы неплохо записи еще пронумеровать сквозной нумерацией. Мне бы только уточнить, можно это реализовать средствами pdoTools у меня в моих чанках и сниппетах. Или нужно самому что-нибуть придумать.
Мне бы только разобраться, почему у меня выводится только: на странице №1 количество записей = limit, а на странице №2 последняя запись. Если поставить limit=3, то выведутся на странице №1 три записи, а на странице №2 запись №11. Ну и, было бы неплохо записи еще пронумеровать сквозной нумерацией. Мне бы только уточнить, можно это реализовать средствами pdoTools у меня в моих чанках и сниппетах. Или нужно самому что-нибуть придумать.
Сейчас же есть pdoPage.pdoPage сам ничего не выбирает, он вызывает другой сниппет для этого. По умолчанию — pdoResources.
То есть, нужно написать свой правильный сниппет для вызова внутри pdoPage. Про это и статья по ссылке.
Ну и непонятно, что такого сложного в сниппете LIST, что не может сделать pdoResources из коробки?
сейчас LIST — это каркас. Хочу туда еще кучу условий потом навесить, типа JOIN по TV параметрам и т.д. Я понимаю, что pdoResource это круто, но мне проще для понимания поковырять свой сниппет.
Я сейчас понять не могу, почему выборка как-то странно выводится. Вроде условий минимум, должен вывести, разбить на нужное количество страниц и всё. Но где-то затык непонятный происходит
Я сейчас понять не могу, почему выборка как-то странно выводится. Вроде условий минимум, должен вывести, разбить на нужное количество страниц и всё. Но где-то затык непонятный происходит
но мне проще для понимания поковырять свой сниппет
Я сейчас понять не могуНу раз проще — ковыряй, зачем вопросы задавать? Исходники открыты, примеров масса — читай, изучай, познавай.
Удивляют меня такие заявления: «мне проще так, но я сам сделать ничего не могу, помогите»!
Как вариант можно прописать
&loadModels=`pdoResources`
и джойнить [[+idx]], по идее будет включать подсчет, но тогда проще сразу вызывать pdoResources, чтобы не гонять по базе два сниппета, когда можно выбрать все одним
Ну зачем придумывать глупости, которые сам даже не проверял? Откуда вдруг взялась модель у pdoResources — это что, объект xPDO? Как это позволит выводить [[+idx]]?
idx выставляет сам класс pdoFetch, если выбирать данные через его метод run().
idx выставляет сам класс pdoFetch, если выбирать данные через его метод run().
Докладываю для идущих по моим граблям: напутал с параметрами &limit и &pageLimit.
Соответственно в вызове должно быть
А в сниппете
Соответственно в вызове должно быть
&limit=`10`
А в сниппете
$limit = $modx->getOption('limit',$scriptProperties,10);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.