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

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

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

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

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

ПараметрПо умолчаниюОписание
tpltpl.msProducts.rowЧанк оформления для каждого результата
limit10Лимит выборки результатов
offsetПропуск результатов с начала выборки
depth10Глубина поиска товаров от каждого родителя.
sortbyidСортировка выборки. Для сортировки по полям товара нужно добавить префикс «Data.», например: «&sortby=`Data.price`»
sortbyOptionsУказывает по каким опциям и как сортировать среди перечисленного в &sortby. Передаются строкой, например, «optionkey:integer,optionkey2:datetime»
sortdirASCНаправление сортировки
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, с дополнительными условиями выборки.
linkId связи товаров, который присваивается автоматически при создании новой связи в настройках.
masterId главного товара. Если указаны и «master» и «slave» — выборка пройдёт по master.
slaveId подчиненного товара. Если указан «master» — эта опция игнорируется.
tvPrefixПрефикс для ТВ плейсхолдеров, например «tv.». По умолчанию параметр пуст.
outputSeparator\nНеобязательная строка для разделения результатов работы.
returnIdsВозвращать строку с id товаров, вместо оформленных чанков.
showUnpublishedПоказывать неопубликованные товары.
showDeletedПоказывать удалённые товары.
showHidden1Показывать товары, скрытые в меню.
showZeroPrice1Показывать товары с нулевой ценой.
wrapIfEmpty1Включает вывод чанка-обертки (tplWrapper) даже если результатов нет.
showLogПоказывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr».

Можно использовать и другие общие параметры pdoTools

Особенности

Сниппет 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"}`
...

 

Понравилась статья? Можно поблагодарить автора: отправив ему донат на
YooMoney
или
Qiwi
. Либо поделившись статьей ☟
Поделиться с друзьями
Алексей

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

Оцените автора
( Пока оценок нет )
Web-Revenue.ru