Лимит вывода ресурсов в подкатегориях pdoMenu
Всем привет. Нужна помощь.
Как можно ограничить количество ресурсов в подкатегории. Чтоб выводилось по 2 ресурса в подкатегории. Вывод через Pdomenu.
Структура Сайта
Категория (id=1)
— Подкатегория 1
— Ресурс 1
— Ресурс 2
— Ресурс 3
— Ресурс 4
— Подкатегория 2
— Ресурс 1
— Ресурс 2
— Ресурс 3
— Ресурс 4
— Подкатегория 3
— Ресурс 1
— Ресурс 2
— Ресурс 3
— Ресурс 4
Как можно ограничить количество ресурсов в подкатегории. Чтоб выводилось по 2 ресурса в подкатегории. Вывод через Pdomenu.
Структура Сайта
Категория (id=1)
— Подкатегория 1
— Ресурс 1
— Ресурс 2
— Ресурс 3
— Ресурс 4
— Подкатегория 2
— Ресурс 1
— Ресурс 2
— Ресурс 3
— Ресурс 4
— Подкатегория 3
— Ресурс 1
— Ресурс 2
— Ресурс 3
— Ресурс 4
[[!pdoMenu?
&parents=`1`
&level=`1`
&tplOuter=`@INLINE [[+wrapper]]`
&tplInnerRow=`@INLINE <div><a href="[[+link]]">[[+menutitle]]</a></div>`
]]
если выставить &limit то ограничивается вывод всех ресурсов Комментарии: 19
В pdoMenu, скорее всего, такой функционал не предусмотрен (т.к. возникает сложность с последовательностью нумерации результатов) — т.е. даже модификаторы от [[+idx]] тут особо не помогут.
Если вопрос с меню косметического плана — то можно решить задачу при помощи jquery.
В противном случае разве что вызывать при помощи pdoResources первый уровень меню, а внутри при помощи него же — второй (с выставленным &limit). Или попробовать расписать составной джоин потомков к первому вызову.
UPD: …или же вообще сверстать все руками, без запросов к бд. А активный пункт присваивать уже при помощи Jquery.
Если вопрос с меню косметического плана — то можно решить задачу при помощи jquery.
В противном случае разве что вызывать при помощи pdoResources первый уровень меню, а внутри при помощи него же — второй (с выставленным &limit). Или попробовать расписать составной джоин потомков к первому вызову.
UPD: …или же вообще сверстать все руками, без запросов к бд. А активный пункт присваивать уже при помощи Jquery.
Хотелось бы максимально оптимизировать. Т.к как количество подкатегорий может меняться.
Pdomenu не принципиально.
Нужно вывести вот в таком формате prntscr.com/9xqji9
Pdomenu взял, потому что там можно использовать tplStart
В данный момент вот так, через снипет getChildIds получаю всех потомков категории, и вывожу их
Если подскажите лучше решение, как правильней или в какую сторону копать, буду очень признателен
Pdomenu не принципиально.
Нужно вывести вот в таком формате prntscr.com/9xqji9
Pdomenu взял, потому что там можно использовать tplStart
В данный момент вот так, через снипет getChildIds получаю всех потомков категории, и вывожу их
[[!pdoMenu?
&parents=`[[!getChildIds]]`
&level=`1`
&displayStart=`1`
&tplStart=`@INLINE <div><h3>[[+menutitle]]</h3><ul class="list">[[+wrapper]]</ul><div class="documents-list__all"><a class="documents-list__all-link btn btn_small" href="#">все документы</a></div></div>`
&tplOuter=`@INLINE [[+wrapper]]`
&tplInnerRow=`@INLINE <div><a href="[[+link]]">[[+menutitle]]</a></div>`
]]
снипет getChildIds$child = $modx->getChildIds(8, 1, array('context' => 'web'));
return implode(',',$child);
всё бы хорошо, только ограничить вывод по 5 не знаю.Если подскажите лучше решение, как правильней или в какую сторону копать, буду очень признателен
Возможно сделать такое на pdoMenu без стороних снипетов. Посмотри мою недавную тему, она очень похоже на твою, за исключением того, что мне подкатегории >3 нужно было оборачивать в див. В твоем случае просто ничего не выводить.
modx.pro/help/7710/
Возникнут вопросы пиши.
modx.pro/help/7710/
Возникнут вопросы пиши.
Вот навалял, Выводит категорию, подкатегорию и 3 ресурса
[[!pdoMenu?
&parents = `1`
&level = `2`
&displayStart = `1`
&levelClass = `level`
&firstClass =``
&lastClass = ``
&tplOuter = `@INLINE <div class="out">[[+wrapper]]</div>`
&tplParentRow = `@INLINE <div class="block-cat">
<p>[[+menutitle]]-Подкатегория</p>
[[+wrapper]]
</div>`
&tplInner = `@INLINE <div class="items">
[[+wrapper]]
</div>`
&tplInnerRow = `test`
]]
Чанк «test», т.к. фильтры обязательно в чанк. В нем прописанно кол-во выводимых ресурсов, в данном случае 3.[[+classes:is=`class="level3"`:then=`
[[+idx:islte=`3`:then=`
<div><a href="">[[+menutitle]]-Ресурс</a></div>
`]]
`]]
Спасибо
Всегда пожалуйста
[[+classes:is=`class="level3"`:then=`
[[+idx:islte=`3`:then=`
<div><a href="">[[+menutitle]]-Ресурс</a></div>
`]]
`]]
как это будет выглядеть на Fenom?
Сорри, без понятия. Еще не сталкивался с fenom, времени небыло. Может кто знает ответит.
{if $classes == 'class="level3"' && $idx <= 3}
<div><a href="">{$menutitle}-Ресурс</a></div>
{/if}
Это Глебу надо...., лучше ему ответить, так придет ему письмо об ответе.
ничего не выводит(
{$_modx->runSnippet('pdoMenu', [
'parents' => 8,
'level' => 2,
'displayStart' => 1,
'levelClass' => 'level',
'firstClass' => '',
'firstClass' => '',
'tplStart' => '@INLINE [[+wrapper]]',
'tplOuter' => '@INLINE <div class="documents">[[+wrapper]]</div>',
'sortby' => 'publishedon',
'sortdir' => 'DESC',
'tplParentRow ' => '@INLINE
<li class="list-item documents-list__item">
<h3 class="documents-list__ttl h3">[[+menutitle]]</h3>
[[+wrapper]]
<div class="documents-list__all">
<a href="[[+link]]" class="documents-list__all-link btn btn_small">Все документы</a>
</div>
</li>',
'tplInner' => '@INLINE <ul class="list documents-list">[[+wrapper]]</ul>',
'tplPath' => './assets/elements/tpl/',
'tplInnerRow' => '@FILE docs.tpl',
])}
docs.tpl{if $classes == 'class="level3"' && $idx <= 3}
<div><a href="">{$menutitle}-Ресурс</a></div>
{/if}
=> Смотрим лог ошибок.
Лог ошибок пуст
если
тест тест тест тест тест
условие не срабатывает(
если
{if $classes == 'class="level3"' && $idx <= 3}
<div><a href="">{$menutitle}-Ресурс</a></div>
{else}
тест
{/if}
то выводиттест тест тест тест тест
условие не срабатывает(
Попробуйте вызвать в чанке плейсхолдеры {$idx} и {$classes} и посмотреть, что они возвращают.
Скорее всего, idx всех ресурсов больше 3.
Скорее всего, idx всех ресурсов больше 3.
вызвал так:
<li{$classes} id="idx-{$idx}">{$menutitle}</li>
получил вот так:<ul class="list documents-list">
<li class="level2" id="idx-1">Документы федеральных органов</li>
<li class="level2" id="idx-2">Документы конференции</li>
<li class="level2" id="idx-3">Документы регионального совета</li>
<li class="level2" id="idx-4">Документы председателя</li>
<li class="last level2" id="idx-5">Пресс-релизы</li>
</ul>
=> проверка не проходит по условию
— нужен не level3, а level2.
+ в случай, если у вас в контейнере будет 3 или менее ресурса — последний пункт не будет проходить т.к. у него в классах будет висеть «last».
$classes == 'class="level3"'
— нужен не level3, а level2.
+ в случай, если у вас в контейнере будет 3 или менее ресурса — последний пункт не будет проходить т.к. у него в классах будет висеть «last».
Сорри, хотел ответить Максиму Кузнецову. Это для него.
Почему? Можно например использовать &levelClass, и по нему определять какой уровень вложенности с помощью фильтров.
Почему? Можно например использовать &levelClass, и по нему определять какой уровень вложенности с помощью фильтров.
Упс...)
Вообщем сделал вот таким способом:
{$_modx->runSnippet('pdoMenu', [
'parents' => $_modx->runSnippet('getChildIds'),
'level' => 2,
'displayStart' => 1,
'fenomModifiers'=>'dateAgo'
'tplOuter' => '@INLINE
<div class="documents">
<ul class="list documents-list">{$wrapper}</ul>
</div>',
'tplInner' => '@INLINE {$wrapper}',
'tplStart' => '@INLINE
<li class="list-item documents-list__item">
<h3 class="documents-list__ttl h3">{$menutitle}</h3>
<ul class="list list_marker-circle documents-list__sub-list">{$wrapper}</ul>
<div class="documents-list__all">
<a class="documents-list__all-link btn btn_small" href="{$link}">все документы</a>
</div>
</li>',
'tplInnerRow' => '@INLINE
{if $idx <= 3}
<li class="list-item documents-list__sub-item">
<a class="documents-list__item-link" href="[[+link]]">{$menutitle}</a>
<span class="documents-list__item-date">
<i class="icon icon-date"></i>
{$publishedon | dateago}
</span>
</li>
{/if}',
])}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.