pdoResources замена offset

Всем привет, подскажите пожалуйста. Смотрите есть статья, в pdoResources передаётся в параметр offset её menuindex, чтобы в поле «Ещё статьи» выводились дальше те которые идут после неё, но и проблема в том что их 3 шт. и когда человек заходит на 3 от конца статью их становится 2 в блоке «Ещё статьи», потому что уже нечего показывать. Как сделать так если человек дошёл до 3х статей до конца и показывать уже нечего — выводить статьи уже с начала, то есть самые первые.
Всего допустим: 30 ресурсов, нужно чтобы уже на 27ой был уже offset от 1.
Логика какая, есть 30 ресурсов, находимся на 25ом — выводим в блоке 26, 27, 28 по menuindex, но когда на 27ом, то уже выводить почти нет чего, ведь всего 30 ресурсов, блоки начинают пустеть.
[[!pdoResources?
&parents=`2`
&limit=`3`
&depth=`10`
&tpl=`tpl.pdo-more`
&includeTVs=`global-video,img`
&resources=`-[[*id]]`
&sortby=`publishedon`
&sortdir=`DESC`
&offset=`[[*menuindex]]`
]]
Владислав
01 декабря 2020, 20:43
modx.pro
762
0

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

Владислав
01 декабря 2020, 20:48
0
Может есть возможность через pdoNeighbors это сделать? Также если уже нет соседей, то выводить от начала. Точнее если нет минимум 3х соседей
    Артур Шевченко
    01 декабря 2020, 22:58
    0
    {set $total = $_modx->runSnippet('pdoResources', ['parents'=>'2', 'setTotal' => 1, 'tpl' => '@INLINE {$total}'])}
    {if $_modx->resource.menuindex < $total - 3}
    {set $offset = $_modx->resource.menuindex}
    {else}
    {set $offset = 0}
    {/if}
    Не проверял, но как-то так можно попробовать.
      Владислав
      02 декабря 2020, 10:58
      0
      Он не работает, просто нечего вообще не выводит. Как будто его и нет, хотя в настройках стоит «Использовать Fenom на страницах и в чанках»
        Артур Шевченко
        02 декабря 2020, 11:02
        0
        Пардон, туплю
          Владислав
          02 декабря 2020, 11:04
          0
          а вызывать как?
            Владислав
            02 декабря 2020, 11:05
            0
            Создать новый плагин и в него поместить этот код?
            Артур Шевченко
            02 декабря 2020, 11:05
            0
            Отдельно total и offset пробовал выводить?
              Владислав
              02 декабря 2020, 11:06
              0
              {set $total = $_modx->runSnippet('pdoResources', ['parents'=>'2', 'setTotal' => 1, 'tpl' => '@INLINE {$total}'])}
              Это раздельно? — да
              {if $_modx->resource.menuindex < $total — 3}
              {set $offset = $_modx->resource.menuindex}
              {else}
              {set $offset = 0}
              {/if}
                Владислав
                02 декабря 2020, 11:09
                0
                обычный вызов через [[! ]] — работает, а это нет :(
                  Артур Шевченко
                  02 декабря 2020, 11:16
                  0
                  Это логично, надо через fenom вызывать.
                    Артур Шевченко
                    02 декабря 2020, 11:16
                    0
                    обычный вызов не понимает что ты ему переменную передаешь.
                      Владислав
                      02 декабря 2020, 11:20
                      0
                      Я понимаю, но Ваш код вызова не работает, я уже все параметры fenom Включил
                        Владислав
                        02 декабря 2020, 11:21
                        0
                        Сейчас вот так вставляю в шаблон страницы:
                        {set $total = $_modx->runSnippet('pdoResources', ['parents'=>'2', 'setTotal' => '1', 'tpl' => 'tpl.pdo-more'])}
                        {if $_modx->resource.menuindex < $total — 3}
                        {set $offset = $_modx->resource.menuindex}
                        {else}
                        {set $offset = 0}
                        {/if}
                          Артур Шевченко
                          02 декабря 2020, 11:41
                          0
                          {set $total = $_modx->runSnippet('pdoResources', ['parents'=>'2', 'setTotal' => '1', 'tpl' => 'tpl.pdo-more'])}
                          Это не работает, не знаю почему, проще написать свой модификатор, который будет возвращать количество дочерних элементов типа такого назовем его getCountRes
                          return count($modx->getCollection('modResource', array('parent' => $parent)));
                          В шаблоне
                          {set $total = $_modx->runSnippet('getCountRes', ['parent'=>'2'])}
                          {if $_modx->resource.menuindex < $total - 3}
                          {set $offset = $_modx->resource.menuindex}
                          {else}
                          {set $offset = 0}
                          {/if}
                          {'!pdoResources' | snippet:[
                          'parents'=>2,
                          'limit'=>3,
                          'depth'=>10,
                          'tpl'=>'tpl.pdo-more',
                          'includeTVs'=>'global-video,img',
                          'resources'=>'-'~$_modx->resource.id,
                          'sortby'=>'publishedon',
                          'sortdir'=>'DESC',
                          'offset'=>$offset
                          ]}
                            Владислав
                            02 декабря 2020, 13:54
                            0
                            Отображает и работает, но когда дело доходит до последних ресурсов — он пустеет
                              Владислав
                              02 декабря 2020, 14:00
                              0
                              А может дело в том что есть ещё и не опубликованные ресурсы? Он считает наверное вообще все ресурсы?
                                Артур Шевченко
                                02 декабря 2020, 14:30
                                0
                                возможно, getCountRes считает все.
                                  Владислав
                                  02 декабря 2020, 14:33
                                  0
                                  Заменил его на:
                                  <?php
                                  $count = 0;
                                  $parent = isset($parent)? (integer) $parent: 0;
                                  if ($parent > 0) {
                                  $criteria = array(
                                  'parent' => $parent,
                                  'deleted' => false,
                                  'published' => true,
                                  );
                                  $count = $modx->getCount('modResource', $criteria);
                                  }
                                  return (string) $count;

                                  Вроде бы всё норм
                                    Артур Шевченко
                                    02 декабря 2020, 14:35
                                    0
                                    Ну и отлично
                                    Владислав
                                    02 декабря 2020, 20:36
                                    0
                                    Артур, единственное он не нормально сортирует по sortby menuindex (без разницы ASC или DESC, суть в том что он пропускает много ресурсов.
                                    Владислав
                                    02 декабря 2020, 20:42
                                    0
                                    offset исключает от конца или от начала, а суть другая. Допустим всего 50 ресурсов и я нахожусь на 27ом ресурсе по menuindex из дерева ресурсов, то вывести снизу необходимо 28, 29, 30, 31. Если нахожу на 46ом, то выводить уже 1,2,3,4 по menuindex
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                21