Павел Романов

Павел Романов

Был в сети 30 июля 2026, 15:23
Заказы принимаю
Что касается просто открытия/обновления страницы (без значений в URL), то довольно ровно 0.4 – 0.49.
В остальном чем больше фильтров выбрано, тем дольше обработка (проверяется больше условий).
Если выбраны только новинки, то 0.45, если добавить еще что-то, будет дольше.
Ну и зависит, конечно, от типа поля. Для TV и опций товаров нужны дополнительные запросы.
Новинки, Акции, Хиты, Цена и Цвет — поля товара miniShop3.
На складе — TV-шка.
Материал — опция категории (ms3_product_option).

Компонент потому и «simple», что не претендует на суперскорость.
Для >1000 товаров в категории или большого кол-ва фильтров нужно использовать другие решения.
[[*alias]] или [[*id]] выводит соответствующие поля текущего ресурса.
Если посетитель находится на главной — они от нее и выводятся.

Блоки в лендинге. должны выводиться аналогично меню.

[[pdoResources?
  &tpl=`section_tpl`
  &limit=`0`
]]

А в чанке section_tpl уже указывайте [[+id]], [[+alias]], [[+pagetitle]] и т. д. — они будут забираться от выводимых ресурсов
Первый вызов перебирает все категории внутри каталог (6) и они выводятся как чанк category_tpl.
В этом чанке для каждой категории (категория 1 (7) и категория 2 (8)) вызывается msProducts, который выводит 16 товаров, принадлежащие данной категории ([[+id]] будет выводить 7 и 8 соответственно, что и будет передаваться в &parents=`[[+id]]`).

&templates — ограничивает выборку определенным шаблоном.
А почему не сделать так:

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

В чанке просто:
{
            "@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"
                }
            }
        }
Тут нет плейсхолдера pagetitle — получайте его через $file.resource_id (для ms2Gallery) или $file.product_id (для msGallery).

{foreach $files as $file}
    <picture>
        <source srcset="{$file['webp250x250']}" type="image/webp">
        <img class="lazyload"
            data-src="{$file['webp250x250']}"
            src="{$file['webp250x250']}"
            alt="{$file.resource_id | resource : 'pagetitle' | htmlent}">
    </picture>
{/foreach}
А так не работает (пробелы только в & quot; уберите)?
[[+pagetitle:replace=`"==& quot ;`]]
{$pagetitle | replace : '"' : '& quot ;'}

Или можно сделать сниппет filter (он еще и кавычки-елочки ставит вместо обычных):
<?php
$str = $modx->stripTags($input);
$str = preg_replace("#([^=])\"([^\"]+)\"#", "\\1«\\2»", $str);
$arr1 = array(' & ', '"', '\'');
$arr2 = array(' & amp ; ', '& quot ;', '& apos ;');
return str_replace($arr1, $arr2, $str);

Ну и
[[+pagetitle:filter]]
{$pagetitle | filter}