Война с pdoPage

Добрый день!

Совсем чего-то я запутался с 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 не разобрался :-(
Роман
10 апреля 2016, 19:30
modx.pro
1
2 320
0

Комментарии: 8

    Роман
    11 апреля 2016, 07:15
    0
    Спасибо за ссылочку. Я так понимаю, что это описание первой реализации pdoTools. Сейчас же есть pdoPage.
    Мне бы только разобраться, почему у меня выводится только: на странице №1 количество записей = limit, а на странице №2 последняя запись. Если поставить limit=3, то выведутся на странице №1 три записи, а на странице №2 запись №11. Ну и, было бы неплохо записи еще пронумеровать сквозной нумерацией. Мне бы только уточнить, можно это реализовать средствами pdoTools у меня в моих чанках и сниппетах. Или нужно самому что-нибуть придумать.
      Василий Наумкин
      11 апреля 2016, 07:20
      0
      Сейчас же есть pdoPage.
      pdoPage сам ничего не выбирает, он вызывает другой сниппет для этого. По умолчанию — pdoResources.
      То есть, нужно написать свой правильный сниппет для вызова внутри pdoPage. Про это и статья по ссылке.

      Ну и непонятно, что такого сложного в сниппете LIST, что не может сделать pdoResources из коробки?
        Роман
        11 апреля 2016, 08:09
        0
        сейчас LIST — это каркас. Хочу туда еще кучу условий потом навесить, типа JOIN по TV параметрам и т.д. Я понимаю, что pdoResource это круто, но мне проще для понимания поковырять свой сниппет.

        Я сейчас понять не могу, почему выборка как-то странно выводится. Вроде условий минимум, должен вывести, разбить на нужное количество страниц и всё. Но где-то затык непонятный происходит
          Василий Наумкин
          11 апреля 2016, 08:26
          0
          но мне проще для понимания поковырять свой сниппет
          Я сейчас понять не могу
          Ну раз проще — ковыряй, зачем вопросы задавать? Исходники открыты, примеров масса — читай, изучай, познавай.

          Удивляют меня такие заявления: «мне проще так, но я сам сделать ничего не могу, помогите»!
        Алексей Федоров
        11 апреля 2016, 08:01
        -3
        Как вариант можно прописать
        &loadModels=`pdoResources`
        и джойнить [[+idx]], по идее будет включать подсчет, но тогда проще сразу вызывать pdoResources, чтобы не гонять по базе два сниппета, когда можно выбрать все одним
          Василий Наумкин
          11 апреля 2016, 08:25
          +1
          Ну зачем придумывать глупости, которые сам даже не проверял? Откуда вдруг взялась модель у pdoResources — это что, объект xPDO? Как это позволит выводить [[+idx]]?

          idx выставляет сам класс pdoFetch, если выбирать данные через его метод run().
      Роман
      11 апреля 2016, 15:40
      0
      Докладываю для идущих по моим граблям: напутал с параметрами &limit и &pageLimit.
      Соответственно в вызове должно быть

      &limit=`10`

      А в сниппете
      $limit = $modx->getOption('limit',$scriptProperties,10);
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8