Сниппет 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! :) весь остальной функционал подключаете как обычно.
Комментарии ()