Персональный разработчик Вашего сайта.
Модули. Скрипты. Плагины.

Group&Sort Snippet

Сниппет группировки товаров по производителю и сортировки по прайсу для MODX Revolution 2.4.0-pl

У Вас много товаров на сайте под управлением MODX REVO, но нет порядка? Тогда данное решение Вам поможет. Это сниппет, который выполняет функции группировки по производителю и сортировки товаров по прайсу - по убыванию и возрастанию. Легко внедряется и требует минимальных знаний администратора сайта для настройки. Для его использования Вам понадобится лишь знать техническое название tv-поля, куда вписывается название производителя или же создать такое поле через административную часть Вашего сайта и название tv-поля, содержащего стоимость товара. 

До

После

Сам сниппет

Скрипт принимает в себя параметры из массива GET, и в зависимости от полученных значений сортирует позиции. Группировка осуществляется на основе данных из поля «Производитель», если же поле не заполнено - товары уходят в блок «Другие производители» и выводятся под всеми блоками с производителями в самом низу.

// author - Pivtsaeva Lubov (Lu_smith)
// for Modx Revolution 2.4.0-pl
// mail - pl.web-master@yandex.ru
// snippet name - ZavodResource

// zavod_proizvoditel - это tv-поле, которое заполняется в CMS у каждого товара, и содержит в себе название производителя
// price - это tv-поле, которое заполняется в CMS у каждого товара, и содержит в себе стоимость текущего товара
// &includeTVs=`zavod_proizvoditel, price, model_img, deal, trailerSizes, trailerCapacity, possibilities` - здесь перечислены tv-поля, значения из которых выводятся в превью товаров в каталоге: производитель, цена, наименование, характеристики, изображение и т.д.


$out_put = '';
$listDate = $modx->runSnippet('pdoResources', array(
'includeTVs'=> $tvname,
'docid'=>$docid,
'tpl'=>'@CODE:[[+tv.zavod_proizvoditel]]|',
'sort'=>'{"sortby":"zavod_proizvoditel","sortdir":"DESC"}'
));
$listDate = mb_substr($listDate, 0, -1);

$arr = explode('|', $listDate);
$uarr = array_unique($arr);
asort($uarr);


if(isset($_GET['sortdir'])) {
    $sortby = 'price';
    $sortdir = $_GET['sortdir'];
} else {
    $sortby = 'menuindex';
    $sortdir = 'ASC';
}

$uarr = array_diff($uarr, array('', ' ', "
", 0, null));


foreach($uarr as $data_name){
    $data_name = $data_name;
    $data_name_count = mb_strlen($data_name,'UTF-8');

if($data_name_count > 0) {
    $data_name = trim($data_name);
    $data_name2 = str_replace('"', '"', $data_name);
    $list = $modx->runSnippet('pdoResources', array(
        'includeTVs'=> $includeTVs,
        'docid'=>$docid,
        'tpl'=>$itemTpl,
        'where'=>'{"zavod_proizvoditel":"'.$data_name2.'"}',
        'sortbyTV'=>$sortby,
        'sortdirTV'=>$sortdir,
        'showLog'=>0
    ));
}

$out_put .= $modx->getChunk($blockTpl, array('items'=>$list,'data_name'=>$data_name));  
}
return $out_put;

?>


// ниже представлен код для вставки и вывода товаров в шаблон каталога

[[!ZavodResource?
&tvname=`zavod_proizvoditel`
&docid=`[[*id]]`
&blockTpl=`zavod_proizvoditel.Block`
&itemTpl=`tpl_model_pricep`
&includeTVs=`zavod_proizvoditel, price, model_img, deal, trailerSizes, trailerCapacity, possibilities`
&where=`{"zavod_proizvoditel:!=":""}`]]

<div class="tovar" style="text-align: center">
    <h3>Другие производители</h3>
            <ul class="auto-list auto-list--catalog ">
                [[!pdoResources?
                    &parents=`[[*id]]`
                    &depth=`1`
                    &limit=`0`
                    &totalVar=`contentTotal`
                    &tpl=`tpl_model_pricep`
                    &type = `number`
                    &includeTVs=`zavod_proizvoditel, price, model_img, deal, trailerSizes, trailerCapacity, possibilities`
                    &where=`{"zavod_proizvoditel:IS": null}`
                    &sortby=`[[!#GET.sortdir:is=``:then=`menuindex`:else=`price+0`]]`
                    &sortdir=`[[!#GET.sortdir:is=``:then=`ASC`:else=`[[!#GET.sortdir]]`]]`
                    ]]
            </ul>
			</div>

			
// ниже представлено содержимое чанка «zavod_proizvoditel.Block»

<div class="tovary">
<h3>[[+data_name]]</h3>
<ul class="auto-list auto-list--catalog ">
[[+items]]
</ul>
</div>

Есть вопросы? Пишите pl.web-master@yandex.ru

Разработанные мной скрипты, модули и CMS
Портфолио

Смотреть все статьи