GetResorce, lastTpl и offset/idx
Желаю здравия!
имеется вот такая вот связка:
tovaru-schema
В дескрипшене:
моя задача сгенерировать application/ld+json
чанк razmetka-tovarov
И все, супер, и все здорово, и все работает как надо, за исключением одной маленькой детали.
Если я вызываю сниппет со значением idx или offset (что тоже меня вполне устраивает) у меня перестает работать lastTpl, а она мне нужна, т.к. в конце application/ld+json не должно быть запятушечки!
Что делать? куда бежать? =)
Помогите, пожалуйста!
p.s. в коде могут быть не состыковки, т.к. перепробовал разные варианты, и не по одному разу, поэтому тут скорее черновик, а не чистовик.
имеется вот такая вот связка:
[[getResources?
&parents=`6`
&tpl=`tovaru-schema`
&includeContent=`1`
&includeTVs=`1`
&sortby=`{"menuindex":"ASC"}`
&limit=`0`
&depth=`0`
]]tovaru-schema
[[+description]]Т.е. с помощью первого гетресорса, я вызываю, то что есть в папке с индексом 6, но выбираю от туда только дескрипшен.В дескрипшене:
[[!pdoPage?
&element=`msProducts`
&tpl=`razmetka-tovarov`
&tplLast=`razmetka-tovarov-last`
&parents=`7`
&limit=`16`
&sortbyTV=`new`
&sortdirTV=`DESC`
&sortby=`{ "menuindex":"DESC"}`
&idx=`[[+lastIdx]]`
]]Собственно, дескпришен сделаны по аналогии, меняется лишь &parents=`7` моя задача сгенерировать application/ld+json
чанк razmetka-tovarov
{set $count=$idx}
{if $idx >= 16}
{set $count=$count+1}
{$_modx->setPlaceholder('lastIdx', $count)}
{/if}
{
"@type": "ListItem",
"position": [[+idx]],
"item": {
"@type": "Product",
"@id": "https://mydomain.ru/[[~[[+id]]]]",
"name": "[[+pagetitle]]",
"image": "https://mydomainru{$thumb}",
"description": "[[+description]]",
"offers": {
"@type": "Offer",
"url": "https://mydomain/[[~[[+id]]]]",
"priceCurrency": "RUB",
"price": "{$price | replace : " " : ""}",
"availability": "https://schema.org/InStock"
}
}
}
},поясню за эту часть:{set $count=$idx}
{if $count >= 16}
{set $count=$count+1}
{$_modx->setPlaceholder('lastIdx', $count)}
{/if}Т.к. у меня один вызов вложен в другой, и каждый новый вызов обнуляет значение idx, приходится лепить костыль для idx.И все, супер, и все здорово, и все работает как надо, за исключением одной маленькой детали.
Если я вызываю сниппет со значением idx или offset (что тоже меня вполне устраивает) у меня перестает работать lastTpl, а она мне нужна, т.к. в конце application/ld+json не должно быть запятушечки!
Что делать? куда бежать? =)
Помогите, пожалуйста!
p.s. в коде могут быть не состыковки, т.к. перепробовал разные варианты, и не по одному разу, поэтому тут скорее черновик, а не чистовик.
Комментарии: 15
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Если надо используйте &offset в вызове для сдвига выборки.
В чанке просто:
При &limit=`0` выведутся все товары, которые находятся ниже ресурса с id = 6.
Какая у Вас структура каталога и что именно Вы хотите получить в результате?
----категория 1 (7)
--------товары около 100 шт
----категория 2 (8)
--------товары около 100 шт
и так далее
мне нужно вывести из каждой категории по 16 товаров
у меня это реализовано, скажем так, циклом в цикле
Чанк category_tpl:
И вот еще что, в описании pdoResources не нашел &templates… что это дает?
В этом чанке для каждой категории (категория 1 (7) и категория 2 (8)) вызывается msProducts, который выводит 16 товаров, принадлежащие данной категории ([[+id]] будет выводить 7 и 8 соответственно, что и будет передаваться в &parents=`[[+id]]`).
&templates — ограничивает выборку определенным шаблоном.
&outputSeparator=`,` добавит запятую после каждого прохода цикла?
т.е. по всей видимости, pdoResources подставляет эту запятую в каком-то своем формате. =(
Вот чего говорит: Ошибка анализа: в декларации массива отсутствует символ "," или "]", хотя сам код выглядит, так как нужно
А то как пишете вы, у меня так и сделано…
Тогда сделайте сниппет getJson:
Создайте чанк razmetka_wrapper:
И вызывайте (в чанке razmetka-tovarov в конце не должно быть запятой):
Появляется статичный файл LD разметки карточек товара.
После чего при помощи сниппета подгружаю нужную разметку в зависимости от категории. Сниппет так же в комплекте по ссылке выше.