Инструменты пользователя

Инструменты сайта


get_products

Сниппет getProducts

Дополнение для MODX. Сниппет для вывода списка ресурсов. Предназначен специально для больших каталогов, например каталог товаров в интернет-магазине. Не использует xPDO, оптимизирована фильтрация по TV для максимальной скорости.

Скачать сниппет getProducts.

Или зайдите в Приложения -> Установщик -> Загрузить дополнение - и в строке поиска наберите getProduts

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

Плейсхолдер Значение
&tpl имя чанка шаблона для вывода ресурса.
&parents id родительских ресурсов через запятую. по умолчанию текущий.
&depth глубина поиска родителей. по умолчанию 1.
&sortdir направление сортировки. по умолчанию "asc"
&sortbyTV сортировка по tv. указать имя tv
&sortdirTV направление сортировки по tv (asc|desc). по умолчанию "asc"
&sortbyTVType тип значения tv (string|integer). по умолчанию "string"
&orderby json строка сортировки. пример: &orderby=`{"parent":"asc","pagetitle":"asc"}`
&tvFilters json строка фильтрации по тв. пример:&tvfilters=`{"country":"китай","producer":"sony"}`
&includeTVList список имён tv, которые нужно добавить через запятую.
&processTVs применять параметр "параметры ввода" для tv.
&processTVList список tv через запятую, для которых применять processtvs.
&noResults текст, который будет выводиться, если по запросу ничего не найдено
&toPlaceholder
имя плейсхолдера, в который нужно отправить результат работы сниппета. по умолчанию неиспользуется.
&totalVar имя плейсхолдера с общим количеством ресурсов. по умолчанию "total".
&context контекст, из которого нужно вывести ресурсы. по умолчанию текущий.
&className имя класса (объекта) элементов таблицы бд. по умолчанию "modresource".
&activeClass имя css-класса для активного ресурса. по умолчанию "active"
&includeContent включать в выборку из бд значение поля "content" (1|0). по умолчанию выключено.
&returnIDs возвращать только id рессурсов (1|0). по умолчанию 0 (выключено).
&where json строка для условия where в sql запросе. пример: &where=`{"template":15}` (только поля ресурсов, без tv
&outerTpl имя чанка шаблона обертки вывода. доступен только плейсхолдер <html>[[+inner]]</html>.
&useSmarty использовать в чанке шаблонизатор smarty (1|0). по умолчанию 0 (выключено). подробнее ниже
&addSubItemCount в чанке сниппета будет доступен плейсхолдер <html>[[+subitemcount]]</html> - число дочерних ресурсов.
&subItemCountWhere json строка для условия where в sql запросе для подсчета дочерних элементов.
&activeParentSnippet сниппет для активного контейнера-ресурса - <html>[[+activeparent_snippet]]</html>. см. пример с меню ниже.
&orderbyResources (1|0) сортировка по списку id указанным в ''resources''
&debug режим отладки (1|0). в журнал ошибок будут писаться sql запросы, полученные в сниппете. по умолчанию = 0 (отключен).
&includeTVs добавить плейсхолдеры значений tv для ресурсов (1|0). префикс для tv: "tv.". пример: <html>[[+tv.image]]</html>. по умолчанию = 0 (отключен).
&resources список id ресурсов (товаров) через запятую. внимание! если нужен вывод только указанных id, отключить вывод по родителю так: &parents=`-1`
&sortby поле для сортировки (только поля ресурсов, без tv). по умолчанию "menuindex". для сортировки вразнобой использовать &sortby=`rand()`
&packageName имя пакета элементов таблицы бд. например: shop - будет запрошен класс по адресу "/core/components/shop/model/shop/shopcontent.class.php". рекоммендуется использовать пакет migxdb (http://modx.com/extras/package/migx)
&fromParentList cписок полей через запятую, которые нужно добавить товарам от родителей. например "pagetitle,image" - в чанке сниппета будут доступны плейсхолдеры <html>[[+parent.pagetitle]]</html> и <html>[[+parent.image]]</html> (tv). по умолчанию выключено.

Параметры кэширования

Параметр Значение
&gp_cache Включить кэширование (1|0). По умолчанию выключено - 0.
&cacheId Идентификатор кэша. По умолчанию «gpCache».

Необязательные параметры кэширования

Параметр Значение
&cache_key Ключ кэша (название папки для файлов кэша). По умолчанию берется из настроек системы - cache_resource_key.
&cache_handler Обработчик кэширования. По умолчанию берется из настроек системы - cache_resource_handler (xPDOFileCache).
&cache_expires число секунд для кэширования. По умолчанию 0 (бесконечное).

Примеры

Пример: 10 ресурсов

[[!getProducts?
&parents=`5`
&includeTVs=`1`
&includeTVList=`price,image,producer,country`
&limit=`10`
&tpl=`product`
&where=`{"template":15}`
&tvFilters=`{"country":"Китай","producer":"Sony"}`
]]

Пример: getProducts + getPage

[[!getPage?
&cache=`1`
&elementClass=`modSnippet`
&element=`getProducts`
&parents=`5`
&includeTVs=`1`
&includeTVList=`price,image,producer,country`
&limit=`10`
&tpl=`product`
&where=`{"template":15}`
&tvFilters=`{"country":"Китай","producer":"Sony"}`
&pageFirstTpl=` <li class="control"><a [[+classes]] href="[[+href]]">Первая</a></li> `
&pageLastTpl=` <li class="control"><a [[+classes]] href="[[+href]]">Последняя</a></li> `
]]
<br class="clear" />
<ul class="pages">
[[!+page.nav]]
</ul>

Пример:Через MIGX

[[!getPage?
&cache=`1`
&elementClass=`modSnippet`
&element=`getProducts`
&className=`shopContent`
&packageName=`shop`
&limit=`10`
&tpl=`product`
&where=`{"template":15}`
&pageFirstTpl=` <li class="control"><a [[+classes]] href="[[+href]]">Первая</a></li> `
&pageLastTpl=` <li class="control"><a [[+classes]] href="[[+href]]">Последняя</a></li> `
]]
<br class="clear" />
<ul class="pages">
[[!+page.nav]]
</ul>

Пример: Пример вывода с кэшированием, кэшируется для всех страниц

[[getProducts@top_products?
&gp_cache=`1`
&cacheId=`top_products`
]]

Пример: вывода с кэшированием, кэшируется для всех страниц + учитывается валюта:

[[!getProducts@top_products?
&gp_cache=`1`
&cacheId=`top_products_[[!+shk_currency]]`
]]

Пример: вывода многоуровневого меню (замена Wayfinder). Подуровни выводятся только для текущей категории:

[[getProducts?
&parents=`4`
&where=`{"hidemenu":0,"template:<>":5}`
&tpl=`menuRowTpl`
&addSubItemCount=`1`
&activeParentSnippet=`getProducts?parents=[[+id]]&tpl=menuRowTpl2`
]]
HTML: код чанка menuRowTpl

<li>
    <a href="[[~[[+id]]]]" class="[[+activeClass]]">[[+pagetitle]] ([[+subitemcount]])</a>
    [[+active:is=`1`:then=`
    <ul>
        [[+activeParent_snippet]]
    </ul>
    `:else=``]]
</li>

HTML: код чанка menuRowTpl2

<li>
    <a href="[[~[[+id]]]]" class="[[+activeClass]]">[[+pagetitle]]</a>
</li>

Пример: параметров фильтрации

Пример Параметр
Фильтрации по цене - больше и меньше: &tvfilters=`{«price:>=,⇐:and»:[200,500]}`
C поиском подстроки: &tvfilters=`{«param:like»:«%черный%»}`
Для поиска по стандартным полям: &where=`{«temlate:=:and»:«2»,«pagetitle:like:and»:«%черный%»}`
Поиск по множественным значениям: &tvfilters=`{«param:like:or»:[«%черный%»,«%синий%»,«%зеленый%»]}`

Плейсхолдеры доступные для чанка в &tpl

Плейсхолдер Значение
idx индекс строки от нуля
first (1|0) первая строка. если первая строка, то выведется "1", если нет - "0".
last (1|0) последняя строка
odd четная строка
activeclass класс активного ресурса
classnames все css-классы одной строкой
active(1|0) активный ресурс
activeparent id активного родителя
activeparent_snippet вывод сниппета из параметра &activeparentsnippet
tv.любойtv tv параметры
parent.полеотродителя поля от роделя (в т.ч. tv)

Smarty

Если включить параметр «useSmarty», в чанке сниппета можно использовать шаблонизатор Smarty. Рекоммендуется установить пакет modxSmarty (http://modx.com/extras/package/modxsmarty) от fi1osof. В чанке вместо, например, [[+pagetitle]] нужно писать {$item.pagetitle}. Для TV-параметров синтаксис такой: {$item['tv.price']}

Логические операторы в Smarty: http://www.smarty.net/docs/en/language.function.if.tpl

HTML: пример чанка с использованием Smarty

<div class="product shk-item">
    <div class="product-b">
        <div class="product-descr">
            <a href="{link id="{$item.id}"}">
                {if $item['tv.image'] ne ""}
                <img class="shk-image" src="{$item['tv.image']}" alt="" height="130" width="130" />
                {else}
                <img class="shk-image" src="/assets/images/nophoto.jpg" alt="" height="130" width="130" />
                {/if}
            </a>
            <h3>{$item.pagetitle}</h3>
            {$item.introtext}<br />
            <a href="{link id="{$item.id}"}">Подробнее &rsaquo;</a>
            <div style="clear:both;"></div>
            <small>
                {if $item['tv.inventory'] gt 0}
                <b style="color:green;">есть в наличии</b>
                {else}
                <b style="color:red;">нет в наличии</b>
                {/if}
            </small>
        </div>
        <form action="{link id="{field name="id"}"}" method="post">
            <fieldset>
                <input type="hidden" name="shk-id" value="{$item.id}" />
                <input type="hidden" name="shk-name" value="{$item.pagetitle}" />
                <input type="hidden" name="shk-count" value="1" />
                <div class="product-price">
                    <button type="submit" class="shk-but">В корзину</button>
                    <div>Цена: <span class="shk-price">{$item['tv.price']}</span> руб.</div>
                </div>
            </fieldset>
        </form>
    </div>
</div>

get_products.txt · Последние изменения: 2018/11/10 21:33 — roman