Условие вывода товаров в msProducts: если есть товары

    При разработке интернет-магазина на MODX Revolution с компонентом miniShop2 часто возникает задача: выводить блок с товарами только при наличии результатов. Иначе страница будет показывать пустой контейнер, что ухудшает пользовательский опыт и SEO. Рассмотрим, как правильно написать условие для сниппета msProducts.

    Базовая конструкция с чанком-обёрткой

    Самый надёжный способ - использовать параметр &tplWrapper. Он позволяет задать чанк-обёртку, который отобразится только если есть хотя бы один товар. Внутри обёртки можно разместить разметку и плейсхолдер [[+output]] для списка.

    [[!msProducts?
      &parents=`[[*parent]]`
      &depth=`0`
      &tpl=`tpl.msProducts`
      &tplWrapper=`tpl.wrapper`
      &resources=`-[[*id]]`
      &includeTVs=`1`
      &includeContent=`1`
      &sortby=`menuindex`
      &sortdir=`ASC`
    ]]

    В чанке tpl.wrapper пропишите:

    Наши товары

    [[+output]]

    Проверка через плейсхолдер результатов

    Если нужно выполнить более сложную логику (например, показать альтернативный контент при отсутствии товаров), используйте сниппет pdoResources или проверку через [[*id]] с условием. Однако miniShop2 предоставляет встроенный плейсхолдер [[+total]], который содержит количество найденных товаров. В чанке-обёртке можно сделать проверку:

    [[+total:gt=`0`:then=`
      

    Товары ([[+total]] шт.)

    [[+output]]
    `:else=`

    Товары не найдены.

    `]]

    Использование условного вывода с Fenom

    В MODX 3 и при включённом парсере Fenom можно писать более гибкие условия прямо в шаблоне:

    {if $_modx->getPlaceholder('total') > 0}
      
    {$_modx->getPlaceholder('output')}
    {else}

    Нет товаров в данной категории.

    {/if}

    Плейсхолдер total автоматически устанавливается сниппетом msProducts, если указан &tplWrapper.

    Типичные ошибки и их решение

    • Пустой блок отображается всегда - проверьте, что вы не забыли параметр &tplWrapper. Без него сниппет выводит только пустую строку, но обёртка не создаётся.
    • Условие не срабатывает - убедитесь, что у товаров верно указан ресурс-родитель (&parents) и они опубликованы. Используйте плейсхолдер [[+total]] для отладки.
    • Конфликт с кэшированием - для динамических страниц используйте некэшируемый вызов ([[!msProducts]]).

    Заключение

    Чтобы вывести блок с товарами только при их наличии, используйте параметр &tplWrapper с чанком-обёрткой или проверку через плейсхолдер [[+total]]. Это улучшит юзабилити и SEO сайта. Применяйте Fenom для более гибких условий в MODX 3.

    Часто задаваемые вопросы