msProducts (MODX minishop2) — документация и примеры вызова товаров

msProducts (MODX minishop2) — документация и примеры вызова товаров

В данном уроке разберем документацию по сниппету msProducts (предназначен для для вывода товаров), который входит в состав MODX дополнения minishop2. Также разберем различные параметры выборок.

Документация по msProducts

Параметры сниппета

Параметр По умолчанию Описание
tpl tpl.msProducts.row Чанк оформления для каждого результата
limit 10 Лимит выборки результатов
offset Пропуск результатов с начала выборки
depth 10 Глубина поиска товаров от каждого родителя.
sortby id Сортировка выборки. Для сортировки по полям товара нужно добавить префикс «Data.», например: «&sortby=`Data.price`»
sortbyOptions Указывает по каким опциям и как сортировать среди перечисленного в &sortby. Передаются строкой, например, «optionkey:integer,optionkey2:datetime»
sortdir ASC Направление сортировки
toPlaceholder Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.
toSeparatePlaceholders Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]], [[+myPl1]] и т.д.
parents Список категорий, через запятую, для поиска результатов. По умолчанию выборка ограничена текущим родителем. Если поставить 0 — выборка не ограничивается.
resources Список товаров, через запятую, для вывода в результатах. Если id товара начинается с минуса, этот товар исключается из выборки.
includeContent Выбирать поле «content» у товаров.
includeTVs Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]].
includeThumbs Список размеров превьюшек для выборки, через запятую. Например: «120×90,360×240» дадут плейслолдеры [[+120×90]] и [[+360×240]]. Картинки должны быть заранее сгенерированы в галерее товара.
optionFilters Фильтры по опциям товаров. Передаются JSON строкой, например, {«optionkey:>»:10}
where Строка, закодированная в JSON, с дополнительными условиями выборки.
link Id связи товаров, который присваивается автоматически при создании новой связи в настройках.
master Id главного товара. Если указаны и «master» и «slave» — выборка пройдёт по master.
slave Id подчиненного товара. Если указан «master» — эта опция игнорируется.
tvPrefix Префикс для ТВ плейсхолдеров, например «tv.». По умолчанию параметр пуст.
outputSeparator \n Необязательная строка для разделения результатов работы.
returnIds Возвращать строку с id товаров, вместо оформленных чанков.
showUnpublished Показывать неопубликованные товары.
showDeleted Показывать удалённые товары.
showHidden 1 Показывать товары, скрытые в меню.
showZeroPrice 1 Показывать товары с нулевой ценой.
wrapIfEmpty 1 Включает вывод чанка-обертки (tplWrapper) даже если результатов нет.
showLog Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr».

Можно использовать и другие [mask_link href=»https://docs.modx.pro/komponentyi/pdotools/obshhie-parametryi» target=»_blank»]общие параметры pdoTools[/mask_link]

Особенности

Сниппет msProducts, как и все сниппеты miniShop2, использует pdoTools для работы. Поэтому все основные его параметры совпадают с pdoResources, но есть и особенности.

Поддержка мультикатегорий

Товар MS2 физически находится только в одной категории, однако, «виртуально» может находиться еще в нескольких разделах. msProducts это учитывает.

Получение картинок

Сниппет умеет выбирать картинки из галереи товара при помощи параметр &includeThumbs. Просто укажите список превьюшек через запятую:

[[!msProducts?
    &parents=`0`
    &includeThumbs=`120x90,360x270`
]]

и вы получите плейсхолдеры [[+120x90]] и [[+360x270]] в чанке.

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

Вы можете указывать параметр &link и требуемый &master или &slave, выбирая, таким образом, связанные товары:

[[!msProducts?
    &parents=`0`
    &link=`1`
    &master=`15`
]]

Этот вызов получит все товары, которые связаны связью 1 с главным товаром 15.

Работа с опциями

msProducts автоматически подключает и выводи все опции товара в плейсхолдеры вида [[+ключ_опции]].

Специальный параметр &optionFilters подключает необходимые таблицы и дополняет параметр &where, позволяя фильтровать товары по их опциям.

[[!msProducts?
    &parents=`0`
    &optionFilters=`{"core_count:>":4}`
]]

Этот вызов выведет все товары, у которых есть опция core_count и она больше 4.

Для сортировки используется параметр &sortbyOptions. В нем через запятую указываются требуемые характеристики и их типы.

&sortbyOptions=`core_count:number`
&sortby=`{"pagetitle":"ASC", "core_count":"DESC"}`

Порядок сортировки указывается по аналогии параметру &sort.

Псевдонимы

Сниппет msProducts сразу присоединяет несколько связанных таблиц товара, позволяя вам получать данные из них без лишних запросов.

Основной класс — это , а остальные представлены ниже:

  • msProduct — Основной класс выборки, наследник modResource.
  • Data — Класс msProductData. Здесь цена, артикул и прочие свойства товара
  • Vendor — Класс производителя товара msVendor. Здесь его название, страна, логотип и т.д.

Плейсхолдеры

Вы можете увидеть все доступные плейсхолдеры товаров просто не указывая чанк оформления:

<pre>
[[!msProducts?
    &parents=`0`
    &tpl=``
]]
</pre>

Примеры из официальной документации

Вывод всех товаров из категории 15:

[[!msProducts?
    &parents=`15`
]]

Вывод с постраничной разбивкой:

[[!pdoPage?
    &element=`msProducts`
    &parents=`15`
]]
[[!+page.nav]]

Вывод всех товаров дороже 1000 рублей:

[[!pdoPage?
    &element=`msProducts`
    &parents=`0`
    &where=`{"Data.price:>":1000}`
]]
[[!+page.nav]]

Вывод товаров фирмы Sony:

[[!pdoPage?
    &element=`msProducts`
    &parents=`0`
    &where=`{"Vendor.name":"Sony"}`
]]
[[!+page.nav]]

Сортировка по артикулу:

[[!pdoPage?
    &element=`msProducts`
    &parents=`0`
    &sortby=`Data.article`
    &sortdir=`asc`
]]
[[!+page.nav]]

Примеры из разработки

Вывод товаров на главной странице по определенным критериям where

В рамках бесплатного курса по MODX + Fenom, я решил на главной вывести 12 карточек, которые в TV поле примечание (primechanie) содержат текст: «Первый займ без процентов». Для этого открыл шаблон главной страницы и в нужном месте вызвал msProducts со следующими параметрами:

{'!msProducts' | snippet : [
    'tpl' => '@FILE chunks/shop/msProductsRow.tpl',
    'includeTVs' => 'primechanie,name_company,partnerlink,litsenziya',
    'tvPrefix' => '',
    'sortdir' => 'ASC',
    'limit' => '12',
    'where' => ' { "primechanie:LIKE":"%Первый займ без процентов%" } '
]}

Где чанк msProductsRow.tpl содержит следующий код:

<div class="ms2_product col my-5 my-md-3">
    <div class="card">
        {if $primechanie?}
        <div class="alert alert-primary mb-0">{$primechanie}</div>
        {/if}
        <div class="card-body">
            <div class="row g-0">
                <div class="col-md-3 col-6">
                    {if $thumb?}
                    <img class="img-fluid" src="{$thumb}" alt="{$pagetitle}">
                    {else}
                    <img class="img-fluid" src="template/img/nologo.png" alt="{$pagetitle}"/>
                    {/if}
                </div>
                <div class="col-md-9 col-6 text-center">
                    <p class="mb-1 fw-bold">{$name_company}</p>
                    <a class="btn btn-outline-secondary btn-sm" href="{$id | url}">Подробнее</a>
                </div>
            </div>
            <hr>
            <ul class="nav flex-column">
                {'msProductOptions' | snippet : [ 'product' => $id, 'tpl' => '@FILE chunks/shop/msProductOptionsCat.tpl' ]}
            </ul>
            <p class="mt-2 mb-0"><a href="{$partnerlink}" class="btn btn-success w-100">Оформить</a></p>
            <p class="mb-0 small text-center">Лицензия ЦБ РФ {$litsenziya}</p>
        </div>
    </div>
</div>

Примеры фильтров для вывода msProducts

Вывести товары с особой ценой

...
&where=`{"Data.old_price:!=":"0"}`
...

Вывести товары с отметкой Новый

...
&where=`{"Data.new":"1"}`
...

Вывести товары с отметкой Популярный

...
&where=`{"Data.popular":"1"}`
...

Вывести товары с отметкой Особый

...
&where=`{"Data.favorite":"1"}`
...

 

Автор

Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

msProducts (MODX minishop2) — документация и примеры вызова товаров: 2 комментария

  1. Нету ни одной статьи в сети про реализацию опций возможности пользовательского выбора и выдачи сортировки по выбору с фронта. В вашей статье затронуто на 50% понимание использования возможности опций. Может есть у вас статья про фильтрацию… Благодарю!

    1. На текущий момент, нет. Пишу сейчас уроки закрытые, там будет подробно все расписано, а здесь не скоро скорее всего выложу)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Exit mobile version