Получить количество элементов в плейсхолдере msProducts
Здравствуйте.
В верстке есть некий слайдер товаров. Элементы получаю через сниппет msProducts и вставляю в плейсхолдер 'favProducts' (т.к. эту штуку нужно выводить в нескольких местах) — все хорошо.
Но в этом слайдере есть ещё и буллеты (т.е. кружочки, число которых равно количеству товаров в слайдере) — заново запускать сниппет msProducts, что бы просто посчитать количество элементов, не хочется.
Может быть есть какой-нибудь способ получить количество элементов в плейсхолдере?
В верстке есть некий слайдер товаров. Элементы получаю через сниппет msProducts и вставляю в плейсхолдер 'favProducts' (т.к. эту штуку нужно выводить в нескольких местах) — все хорошо.
Но в этом слайдере есть ещё и буллеты (т.е. кружочки, число которых равно количеству товаров в слайдере) — заново запускать сниппет msProducts, что бы просто посчитать количество элементов, не хочется.
Может быть есть какой-нибудь способ получить количество элементов в плейсхолдере?
{'!msProducts' | snippet : [
'parents' => 3,
'limit' => 6,
'sortby' => 'menuindex',
'sortdir' => 'ASC',
'where' => ['Data.popular' => 1],
'includeThumbs' => 'medium',
'tpl' => 'msProductIndex',
'toPlaceholder' => 'favProducts'
]}
{var $favproducts = $_modx->getPlaceholder('favProducts')}
{*if}{$favproducts | lenght} <!-- так он считает количество символов, а мне нужно количество элементов -->{/if*}
Комментарии: 12
Если получить в коде fenom нужно, то можно схитрить и подсчитывать в чанке вашем msProductIndex на феном дописав:setPlaceholder('myovechka', $idx) — уточните в доке как вызываются модификаторы эти.
а уже ниже в вызове принимайте getPlaceholde('myovechka')
Должно сработать.
Ну а в JS проблем не должно быть определить кол-во. там 1й строкой можно.
а уже ниже в вызове принимайте getPlaceholde('myovechka')
Должно сработать.
Ну а в JS проблем не должно быть определить кол-во. там 1й строкой можно.
да, я тоже сразу подумал про вариант с плейсхолдером в чанке… но, надеялся, что есть какое-то более правильное решение для fenom ) Спасибо
И на феноме можно, но это можно сделать если у вас минишоп 4й версии.
если нет, то увы.
если нет, то увы.
у меня сайт новый… все компоненты последних версий (буквально пару дней назад начал только делать), можно поподробнее?
а minishop 3.0.7 — видимо не там качал (с modx.pro)… сейчас установил с modstore — страшно, но там ломаться пока особо нечему, сайт новый
а minishop 3.0.7 — видимо не там качал (с modx.pro)… сейчас установил с modstore — страшно, но там ломаться пока особо нечему, сайт новый
установил mnishop 4.3.0 с Modstore — нормально. Как дальше? )
как там сделать?
в новой версии можно вызвать msProduct в режиме data и на феноме посчитать кол-во в массиве. Хотя оно у вас по идее будет почти всегда равно 6. тк у вас лимит =6. Поэтому даже не знаю… есть ли смысл подсчета…
Вывести данные можно добавив в параметры 'return' => 'data',
При таком подходе возвращаться должен голый массив, если не ошибаюсь.
те нужно:
Вывести данные можно добавив в параметры 'return' => 'data',
При таком подходе возвращаться должен голый массив, если не ошибаюсь.
те нужно:
{set $mysnip = 'msProduct' | snippet : ['return' => 'data']}
(проверьте только {$mysnip | print}
И потом можно: {$mysnip | lenght}
— кол-во.
ну так вопрос же и был, что не хочется ещё раз сниппет запускать, что бы просто количество элементов посчитать, когда уже есть готовый плейсхолдер со всеми данными (ну да, их limit=>6, но а вдруг меньше)
Дык у вас один и будет.
Через или foreach переменную mysnip прогнать
или чанк распарсить через parsChunk с уже готовой разметкой. Это уже на свой вкус.
Через или foreach переменную mysnip прогнать
или чанк распарсить через parsChunk с уже готовой разметкой. Это уже на свой вкус.
что-то у меня не получается с этим setPlaceholder — туплю наверное (… получается точно туплю — этот setPlaceholder нужно через сниппет делать в php?
… а нет, вроде все получается, это видимо я сам затупил ( Спасибо всем за помощь )
да, сделаю эти буллеты ещё через один плейсхолдер… наверное, глупый вопрос получился ( fenom — наше всё ))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.