Получение списка ресурсов по параметру TV в MODX Revo.

  • proGroup
  • 5516
  • 2 Комментариев
  • Modx, Revolution, API, TV параметр

Понадобилось донажды для одного проекта реализовать закрепление определенных новостей в ТОПе при выводе на главной странице сайта. Для этого было решено создать TV параметр с типом ввода "список (одиночный выбор)", что дает возможность самостоятельно отмечать ресурсы для закрепления.modx revolution tv

Самым простым решением было бы использовать вложенный вызов сниппета getResources для выбора ресурсов по определенному TV параметру. Но не хотелось сильно нагружать страницу ресурсоемкими сниппетами, поэтому было решено написать свой сниппет для выбора ресурсов с определенным значением TV параметра


<?php
//ид TV по которому нужно сдлать отбор ресурсов
$tv_id=8; 
// выбираем все TV с ID=8
$tvs = $modx->getCollection('modTemplateVarResource', array('tmplvarid'=>$tv_id)); 
//массив для ID ресурсов
$arr_res = array(); 
//перебираем TV 
foreach ($tvs as $tv) { 
//если значение нашего TV = 1 тогда 
if ($tv->value==1) 
//добавляем ID ресурса в массив
$arr_res[] = $tv->contentid; 
}
// возвращаем строку где ID ресурсов разделены ,
return implode(',',$arr_res); 

Далее добавляем параметр resources в вызове сниппета getPage с сортировкой по TV и дате публикации:

[ [ getPage? 
&elementClass=`modSnippet`
&element=`getResources`
&parents=`2,7,9`
&resources=`` //вызов сниппета для сбора ресурсов
&depth=`3`
&limit=`10`
&includeTVs=`1`
&includeContent=`1`
&hideContainers=`1`
&showHidden=`1`
&tpl=`ListPageIndex`
&sortby=`{"publishedon":"DESC"}` //сортируем по дате публикации
&sortbyTV=`showIndex` //и по TV параметру 
] ] 

 

2 Комментарии
  1. 04 февраля 2015, 13:34

    Спасибо авторам, шикарное решение! Одна только проблема, в &tpl= у меня, помимо простейших [[+tv.resource_date:strtotime:date=`%d-%m-%Y`]] и [[+introtext]] присутствует также [[+tv.image]] — то есть TV-картинка. Она выводится в данном случае неполноценно, в виде чистого названия файла (image.jpg). Прообовал [[*tv.image]] — результат пустота. Не подскажете, что это может быть?

    1. 04 февраля 2015, 13:47

      Проверьте для вашего [[+tv.image]] тип ввода: изображение, тип вывода: по умолчанию, хотя тут зависит все от задачи, но если в чанке код вида < img src="[[+tv.image]] " то выведет картинку, так же можно использовать тип вывода изображение и в чанке достаточно будет указать [[+tv.image]]

      Вы должны авторизоваться, чтобы оставлять комментарии.

      Вы можете авторизоваться на сайте через: