Wayfinder и количество документов в контейнере
Есть довольно частая задача - вывести меню до определенного уровня вместе с количеством страниц в каждом разделе. Новички обычно спотыкаются на ней и задают вопросы "а как?!".
Видел разные мнения, в основном, что это очень медленно и сложно, xPDO тормозит, надо писать свой сниппет и т.д. Конечно, все это ерунда и нас, как всегда, выручит Wayfinder.
Итак, обычный вызов сниппета, можно даже некэшированный:
[[!Wayfinder?
&startId=`2`
&level=`3`
&rowTpl=`tpl.Wf.row`
]]
время работы: [^t^]Обычный чанк tpl.Wf.row, только с вызовом особого сниппета в виде фильтра вывода.
<li[[+wf.id]][[+wf.classes]]>
<a href="[[+wf.link]]" [[+wf.attributes]]>[[+wf.linktext]]</a> ([[+id:getItemsCount]])
[[+wf.wrapper]]
</li>И необычный сниппет getItemsCount, который мы вызываем один раз на каждый пункт меню. То есть, очень много раз.
$ids = $modx->getChildIds($input);
$count = 0;
if (!empty($ids)) {
$count = $modx->getCount('modResource', array(
'id:IN' => $ids
,'published' => 1
,'deleted' => 0
,'hidemenu' => 0
,'isfolder' => 0
));
}
return $count;И получается вот такая картина:
Как вы думаете, сколько времени занимает генерация каталога из 1000 товаров на 3 уровня вглубь с подсчетом вложенных ресурсов в каждой позиции?
0.8103 s
А на 2 уровня? #### 0.3650 s
Из кэша, соответственно: 0.0820 s и 0.0684 s. Ужасно тормозной xPDO, зачем его только придумали?
0
👍
👎
❤️
🔥
😮
😢
😀
😡
2 796
30.10.2012 07:43:01