Skip to content
MiniShop3
MiniShop3
Современный компонент интернет-магазина для MODX 3
  1. Компоненты
  2. MiniShop3
  3. Сниппеты
  4. msProducts

msProducts

Сниппет для вывода списка товаров. Основан на pdoTools и поддерживает все его возможности фильтрации, сортировки и пагинации.

Параметры

Основные

ПараметрПо умолчаниюОписание
tpltpl.msProducts.rowЧанк для вывода каждого товара
limit10Количество товаров на странице
offset0Пропустить указанное количество товаров
depth10Глубина поиска в дочерних категориях
parentsтекущий ресурсID родительских категорий через запятую
resourcesID конкретных товаров через запятую

Сортировка

ПараметрПо умолчаниюОписание
sortbyidПоле для сортировки
sortdirASCНаправление: ASC или DESC
sortbyOptionsСортировка по опциям товара (см. ниже)

Связанные товары

ПараметрПо умолчаниюОписание
linkID типа связи (из таблицы ms3_links)
masterID товара-мастера (вывести товары, связанные с ним)
slaveID товара-слейва (вывести товары, для которых он связан)

Важно: parents=0

При использовании параметра link для связанных товаров обязательно указывайте parents => 0, чтобы отключить фильтрацию по категориям. Иначе будут выведены только связанные товары из той же категории.

Фильтрация

ПараметрПо умолчаниюОписание
whereJSON с дополнительными условиями
optionFiltersJSON фильтров по опциям товара
showZeroPricetrueПоказывать товары с нулевой ценой
showUnpublishedfalseПоказывать неопубликованные
showDeletedfalseПоказывать удалённые
showHiddentrueПоказывать скрытые в меню

Дополнительные данные

ПараметрПо умолчаниюОписание
includeContentfalseВключить поле content
includeTVsСписок TV через запятую
includeThumbsПревью изображений через запятую
includeVendorFields*Поля производителя (* = все)
includeOptionsОпции товара для включения

Вывод

ПараметрПо умолчаниюОписание
returndataФормат: data, json, ids, sql
returnIdsfalseВернуть только ID товаров
toPlaceholderСохранить результат в плейсхолдер
toSeparatePlaceholdersПрефикс для отдельных плейсхолдеров
outputSeparator\nРазделитель между товарами
tplWrapperЧанк-обёртка для всего вывода
wrapIfEmptytrueИспользовать обёртку при пустом результате
showLogfalseПоказать лог выполнения

Примеры

Базовый вывод

fenom
{'msProducts' | snippet : [
    'parents' => 5,
    'limit' => 12,
    'tpl' => 'tpl.msProducts.row'
]}

Сортировка по цене

fenom
{'msProducts' | snippet : [
    'parents' => 0,
    'sortby' => 'Data.price',
    'sortdir' => 'ASC'
]}

Новинки (сортировка по дате)

fenom
{'msProducts' | snippet : [
    'parents' => 0,
    'sortby' => 'createdon',
    'sortdir' => 'DESC',
    'limit' => 8,
    'where' => '{"new":1}'
]}

Популярные товары

fenom
{'msProducts' | snippet : [
    'parents' => 0,
    'where' => '{"popular":1}',
    'limit' => 4
]}

Товары определённого производителя

fenom
{'msProducts' | snippet : [
    'parents' => 0,
    'where' => '{"Data.vendor_id":5}'
]}

Фильтрация по опциям

fenom
{* Товары красного цвета размера M *}
{'msProducts' | snippet : [
    'parents' => 0,
    'optionFilters' => '{"color":"red","size":"M"}'
]}

С условием OR в опциях

fenom
{* Красные ИЛИ синие товары *}
{'msProducts' | snippet : [
    'parents' => 0,
    'optionFilters' => '{"color":"red","OR:color":"blue"}'
]}

Связанные товары

Связи товаров позволяют выводить аксессуары, сопутствующие товары, аналоги и т.д.

fenom
{* Аксессуары для текущего товара *}
{'msProducts' | snippet : [
    'link' => 2,
    'master' => $_modx->resource.id,
    'parents' => 0,
    'limit' => 4,
    'tpl' => 'tpl.msProducts.related'
]}

Параметр master указывает товар, для которого ищутся связанные. ID связи (link) соответствует типу связи в настройках MiniShop3.

Обратная связь (товары, к которым текущий является аксессуаром)

fenom
{'msProducts' | snippet : [
    'link' => 2,
    'slave' => $_modx->resource.id,
    'parents' => 0,
    'limit' => 4
]}

Типы связей

По умолчанию в MiniShop3 доступны следующие типы связей:

IDНазвание
1Рекомендуемые (Related)
2Аксессуары
3Аналоги

Создать новые типы связей можно в разделе Настройки → Типы связей.

Сортировка по опции (числовой)

fenom
{* Сортировка по весу (опция weight) *}
{'msProducts' | snippet : [
    'parents' => 0,
    'sortby' => 'weight',
    'sortbyOptions' => 'weight:number',
    'sortdir' => 'ASC'
]}

С превью изображений

fenom
{'msProducts' | snippet : [
    'parents' => 0,
    'includeThumbs' => 'small,medium'
]}

В чанке будут доступны: {$small}, {$medium} — URL превью.

Получение только ID

fenom
{set $productIds = 'msProducts' | snippet : [
    'parents' => 5,
    'returnIds' => 1
]}

{* $productIds = "1,2,3,4,5" *}

Вывод в JSON (для AJAX)

fenom
{'msProducts' | snippet : [
    'parents' => 0,
    'return' => 'json',
    'limit' => 20
]}

С пагинацией (pdoPage)

fenom
{'pdoPage' | snippet : [
    'element' => 'msProducts',
    'parents' => 0,
    'limit' => 12,
    'tpl' => 'tpl.msProducts.row'
]}

{$_modx->getPlaceholder('page.nav')}

Доступные плейсхолдеры в чанке

В чанке tpl доступны все поля товара:

Основные поля ресурса

  • {$id} — ID товара
  • {$pagetitle} — Название
  • {$longtitle} — Расширенный заголовок
  • {$description} — Описание
  • {$introtext} — Аннотация
  • {$content} — Содержимое (если includeContent)
  • {$alias} — Псевдоним URL
  • {$uri} — Полный URI
  • {$parent} — ID родителя
  • {$template} — ID шаблона
  • {$published} — Опубликован
  • {$createdon} — Дата создания
  • {$editedon} — Дата редактирования

Поля товара (Data)

  • {$article} — Артикул
  • {$price} — Цена
  • {$old_price} — Старая цена
  • {$weight} — Вес
  • {$image} — Основное изображение
  • {$thumb} — Превью изображения
  • {$vendor_id} — ID производителя
  • {$made_in} — Страна производства
  • {$new} — Флаг "Новинка"
  • {$popular} — Флаг "Популярный"
  • {$favorite} — Флаг "Избранное"
  • {$color} — Цвет (JSON)
  • {$size} — Размер (JSON)
  • {$tags} — Теги (JSON)

Поля производителя (Vendor)

При includeVendorFields:

  • {$vendor_name} — Название
  • {$vendor_country} — Страна
  • {$vendor_logo} — Логотип
  • {$vendor_address} — Адрес
  • {$vendor_phone} — Телефон
  • {$vendor_email} — Email

Служебные

  • {$idx} — Порядковый номер в выборке

Пример чанка

fenom
{* tpl.msProducts.row *}
<div class="product-card">
    <a href="{$uri}">
        {if $thumb?}
            <img src="{$thumb}" alt="{$pagetitle}" loading="lazy">
        {/if}

        <h3>{$pagetitle}</h3>

        {if $old_price > $price}
            <span class="old-price">{$old_price} руб.</span>
        {/if}

        <span class="price">{$price} руб.</span>

        {if $new}
            <span class="badge badge-new">Новинка</span>
        {/if}
    </a>

    <button type="button"
            data-ms-action="cart/add"
            data-id="{$id}">
        В корзину
    </button>
</div>