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]]`
]]
Всего допустим: 30 ресурсов, нужно чтобы уже на 27ой был уже offset от 1.
Логика какая, есть 30 ресурсов, находимся на 25ом — выводим в блоке 26, 27, 28 по menuindex, но когда на 27ом, то уже выводить почти нет чего, ведь всего 30 ресурсов, блоки начинают пустеть.
&parents=`2`
&limit=`3`
&depth=`10`
&tpl=`tpl.pdo-more`
&includeTVs=`global-video,img`
&resources=`-[[*id]]`
&sortby=`publishedon`
&sortdir=`DESC`
&offset=`[[*menuindex]]`
]]
Комментарии: 21
Может есть возможность через pdoNeighbors это сделать? Также если уже нет соседей, то выводить от начала. Точнее если нет минимум 3х соседей
{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}
Не проверял, но как-то так можно попробовать.
Он не работает, просто нечего вообще не выводит. Как будто его и нет, хотя в настройках стоит «Использовать Fenom на страницах и в чанках»
Пардон, туплю
а вызывать как?
Создать новый плагин и в него поместить этот код?
Отдельно total и offset пробовал выводить?
{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}
Это раздельно? — да
{if $_modx->resource.menuindex < $total — 3}
{set $offset = $_modx->resource.menuindex}
{else}
{set $offset = 0}
{/if}
обычный вызов через [[! ]] — работает, а это нет :(
Это логично, надо через fenom вызывать.
обычный вызов не понимает что ты ему переменную передаешь.
Я понимаю, но Ваш код вызова не работает, я уже все параметры fenom Включил
Сейчас вот так вставляю в шаблон страницы:
{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}
{if $_modx->resource.menuindex < $total — 3}
{set $offset = $_modx->resource.menuindex}
{else}
{set $offset = 0}
{/if}
{set $total = $_modx->runSnippet('pdoResources', ['parents'=>'2', 'setTotal' => '1', 'tpl' => 'tpl.pdo-more'])}
Это не работает, не знаю почему, проще написать свой модификатор, который будет возвращать количество дочерних элементов типа такого назовем его getCountResreturn 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
]}
Отображает и работает, но когда дело доходит до последних ресурсов — он пустеет
А может дело в том что есть ещё и не опубликованные ресурсы? Он считает наверное вообще все ресурсы?
возможно, getCountRes считает все.
Заменил его на:
<?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;
Вроде бы всё норм
$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;
Вроде бы всё норм
Ну и отлично
Артур, единственное он не нормально сортирует по sortby menuindex (без разницы ASC или DESC, суть в том что он пропускает много ресурсов.
offset исключает от конца или от начала, а суть другая. Допустим всего 50 ресурсов и я нахожусь на 27ом ресурсе по menuindex из дерева ресурсов, то вывести снизу необходимо 28, 29, 30, 31. Если нахожу на 46ом, то выводить уже 1,2,3,4 по menuindex
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.