Всего 125 353 комментария

Николай Савин
18 ноября 2025, 16:38
0
Я прошу прощения. Конечно, нужно было зайти, посоветоваться. Не догадался.
Stanislav Ovv
18 ноября 2025, 09:34
0
Чёрт дернул автора сунуться в PrimeVue (:
Дмитрий Середюк
17 ноября 2025, 09:45
0
У себя на проекте использую CLI скрипт в котором выставляется базовая категория, после запуска в указанной категории

define('JSON_DIR', MODX_BASE_PATH . 'assets/jsonld/');

Появляется статичный файл LD разметки карточек товара.

После чего при помощи сниппета подгружаю нужную разметку в зависимости от категории. Сниппет так же в комплекте по ссылке выше.
Сергей
17 ноября 2025, 08:59
+1
Может кому пригодится, если это товар, то должно быть product_id
{$file.product_id | resource : 'pagetitle' | htmlent}
Артур Шевченко
16 ноября 2025, 16:48
0
Поверь, с гитом разрабатывать удобнее
Евгений
16 ноября 2025, 14:36
0
@Артур Шевченко А просто ещё дорабатывается:) Я вот только запостил, как нашёл ещё пару косяков. (Очень уж запостить хотелось побыстрее — чсв потешить:) )
Сейчас ажиотаж от того, что «маааам, посмотри, что я сделал», прошёл и надо ещё разок свежим взглядом всё пробежать…
Серый
15 ноября 2025, 01:41
0
присоединяюсь к просьбам дополнить чтоб /{id}/ в пути сохранения учитывались и при открытии местоположения файла, тогда не придется колхозить с migxResourceMediaPath…
Спасибо!
Павел Романов
14 ноября 2025, 19:50
0
Да, msProducts почему-то в конце ставит лишнюю запятую.
Тогда сделайте сниппет getJson:

<?php
$pdo = $modx->getService('pdoFetch');
$categories = $pdo->getCollection('modResource', ['parent' => $parent,'template' => $catTemplate],['limit' => 0]);

$prods = [];
$i = 1;

foreach ($categories as $category) {
    $products = $modx->runSnippet('msProducts',[
        'parents' => $category['id'],
        'templates' => $prodTemplate,
        'limit' => $limit,
        'sortby' => '{ "menuindex":"DESC" }',
        'return' => 'json'
    ]);
    $products = json_decode($products,1);
    foreach($products as $product){
        $product['idx'] = $i;
        $prods[] = $pdo->getChunk($tpl,$product);
        $i++;
    }
}

$prods = implode(',',$prods);
$out = $pdo->getChunk($tplWrapper, ['name' => $name, 'output' => $prods]);
return $out;

Создайте чанк razmetka_wrapper:
<!-- Разметка популярных товаров -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "[[+name]]",
  "itemListOrder": "https://schema.org/ItemListOrderAscending",
  "itemListElement": [
      [[+output]]
  ]
}
</script>

И вызывайте (в чанке razmetka-tovarov в конце не должно быть запятой):
[[getJson?
&parent=`6`
&catTemplate=`***` // ID шаблона категории
&prodTemplate=`***` // ID шаблона товара
&limit=`16`
&tpl=`razmetka-tovarov`
&tplWrapper=`razmetka_wrapper`
&name=`Популярные букеты`
]]
Дмитрий
14 ноября 2025, 18:21
0
не, до этого я так же проверял, гугл-валидатором, все было в норме, ругался на наличие последней запятой. А тут ругается на запятую, которая идет сразу после первого же товара.
А то как пишете вы, у меня так и сделано…

<!-- Разметка популярных товаров -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "Популярные букеты",
  "itemListOrder": "https://schema.org/ItemListOrderAscending",
  "itemListElement": [

[[getResources? 
    &parents=`6` 
    &tpl=`tovaru-schema`  
    &includeContent=`1`
    &includeTVs=`1`
    &sortby=`{"menuindex":"ASC"}` 
    &limit=`0` 
    &depth=`0`
    ]]
  ]
    }
Павел Романов
14 ноября 2025, 18:12
0
Смотрите каким должен быть результирующий JSON и сравните с тем, что выводится. Может надо обернуть первый вызов в [ и ]:

[
[[pdoResources?
&tpl=`category_tpl`
&parents=`6`
&templates=`***` // тут ID шаблона категории 
&limit=`0`
&sortby=`{ "menuindex":"DESC"}`
&outputSeparator=`,`
]]
]
Дмитрий
14 ноября 2025, 18:01
0
План был хорош, но почему-то валидатор от гугла ругается именно на эту запятую =)
т.е. по всей видимости, pdoResources подставляет эту запятую в каком-то своем формате. =(

Вот чего говорит: Ошибка анализа: в декларации массива отсутствует символ "," или "]", хотя сам код выглядит, так как нужно
Павел Романов
14 ноября 2025, 17:42
0
Первый вызов перебирает все категории внутри каталог (6) и они выводятся как чанк category_tpl.
В этом чанке для каждой категории (категория 1 (7) и категория 2 (8)) вызывается msProducts, который выводит 16 товаров, принадлежащие данной категории ([[+id]] будет выводить 7 и 8 соответственно, что и будет передаваться в &parents=`[[+id]]`).

&templates — ограничивает выборку определенным шаблоном.
Дмитрий
14 ноября 2025, 17:39
0
аааа! я наверное догадался=)

&outputSeparator=`,` добавит запятую после каждого прохода цикла?
Дмитрий
14 ноября 2025, 17:31
0
Не совсем понимаю, что это даст? не могли бы вы обьяснить?

И вот еще что, в описании pdoResources не нашел &templates… что это дает?
Павел Романов
14 ноября 2025, 17:28
0
Тогда так:

[[pdoResources?
&tpl=`category_tpl`
&parents=`6`
&templates=`***` // тут ID шаблона категории 
&limit=`0`
&sortby=`{ "menuindex":"DESC"}`
&outputSeparator=`,`
]]

Чанк category_tpl:
[[msProducts?
&tpl=`razmetka-tovarov`
&parents=`[[+id]]`
&templates=`***` // тут ID шаблона товара 
&limit=`16`
&sortby=`{ "menuindex":"DESC"}`
&outputSeparator=`,`
]]
Дмитрий
14 ноября 2025, 17:20
0
Кстати, как я писал выше, если я буду использовать &offset, то перестает работать функция tplLast, а для меня она важна
Дмитрий
14 ноября 2025, 17:16
0
каталог (6)
----категория 1 (7)
--------товары около 100 шт
----категория 2 (8)
--------товары около 100 шт
и так далее

мне нужно вывести из каждой категории по 16 товаров

у меня это реализовано, скажем так, циклом в цикле
Павел Романов
14 ноября 2025, 17:01
0
При таком вызове выведутся 16 товаров, которые расположены ниже ресурса с id = 6.
При &limit=`0` выведутся все товары, которые находятся ниже ресурса с id = 6.

Какая у Вас структура каталога и что именно Вы хотите получить в результате?
Дмитрий
14 ноября 2025, 16:50
0
[[msProducts?
&tpl=`razmetka-tovarov`
&parents=`6`
&templates=`***` // тут ID шаблона товара 
&limit=`16`
&offset=`0`
&sortby=`{ "menuindex":"DESC"}`
&outputSeparator=`,`
]]
Плохой вариант, при таком раскладе у меня выведется из первой подпапки 16 позиций, что будет явно противоречить действительности.