×

Создаем вывод количества материалов по количеству ТВ-полей соответственно совпадающих в фильтре запроса на базе getTickets.

Сниппет getTickets сам по себе может фильтровать по ТВ-полю вывод указанных материалов. Но этот вывод исключает дубли материалов (тикетов). А при сложной архитектуре построения сайта на modx иногда требуется оформить такой вывод. Поясню на примере: Нужно вывести Тикеты, у которых есть чекбокс в ТВполе1, ТВполе2, ТВполе3. При том, что Тикет может иметь несколько включенных полей и в выборку должно попадать соответствующее количество дублей этого Тикета.

Напишем свой сниппет на базе снипета getTickets, а точнее – модернизируем снипет getTickets несколькими строчками кода.

1.Скопируйте файл snippet.get_Tickets.php (или создайте копию сниппета getTickets) со своим именем, которое будете в дальнейшем вызывать.

2.В секции «Merge all properties and run!»: удаляем код и добавляем свой (отмечен коментарием myAdd)

// Merge all properties and run!
//$pdoFetch->setConfig(array_merge($default, $scriptProperties));
$pdoFetch->addTime('Параметры запроса подготовлены.');
//$rows = $pdoFetch->run();
if($scriptProperties[offset] > 0 ){ $scriptProperties[offset] = 0;}          //          myAdd
/** Проходим циклом по массиву отобранных ТВешек и в $rows() записываем соответствующий стикер  */ //          myAdd
foreach ($tvs as $tv) {          //          myAdd
    $rows[]= $pdoFetch->getObject('Ticket',$tv[contentid],$scriptProperties);     //          myAdd
         //          myAdd
if (!empty($returnIds)) {
    return $rows;
}

3.    И последнее: в начале модернизируемого файла добавьте 1 строку -

$pdoFetch->setConfig($scriptProperties);
$pdoFetch->addTime('pdoFetch loaded');
/** Запрашиваем количество тикетов содержащих ТВ 'value' => ' Вася ' - грубо забиваем по этому полю */   //      myAdd
$tvs = $pdoFetch->getCollectionMy('modTemplateVarResource', array('value' => 'Вася') , array('limit' => $scriptProperties[limit],'offset'=>$scriptProperties[offset]));     //      myAdd
if (isset($parents) && $parents === '') {
    $scriptProperties['parents'] = $modx->resource->id;
}


Вот и вся модернизация getTickets! :) весь остальной функционал подключаете как обычно.

25 октября 2016, 10:31    Вечерний Минск    680

Комментарии ()