Вывод текстовых значений TV из чанков
В Modx Evolution часто бывает довольно много прикрепленных TV параметров, значения которых хранятся в чанках.
Выводить эти значения на сайт приходится не менее часто и в самом разном виде: ссылками, списками, селектами и т.д.
Но чаще всего в виде простого текстового значения, для чего мы и написали простенький сниппет, в котором достаточно указать только имя чанка и значения TV.
Сниппет выводит как одиночные значения, так и множественные (Delimited List) разделяя их запятой.
Пример вызова:
[[GetTextValues? &tv_val=`[*name-of-tv*]` &chunk=`name-of-chunk`]]
Код сниппета:
<?php
/*******************************************************************************
* Сниппет для получения и вывода текстовых значений из чанков для TV параметров
********************************************************************************/
$tv_val = (isset($tv_val)) ? trim($tv_val) : null;
$tv_delim = (isset($tv_delim)) ? trim($tv_delim) : ','; // разделитель в Delimited List
$chunk = (isset($chunk)) ? trim($chunk) : '';
$text = (isset($text)) ? $text : 'Не указан чанк';
$items_all = array();
$items = array();
$tv_val_arr = array();
if (!is_null($tv_val) && !empty($chunk)) {
if(substr_count($tv_val,$tv_delim)){
$tv_val_arr = explode($tv_delim, $tv_val);
} else {
$tv_val_arr[] = $tv_val;
}
$items_list = explode('||', trim($modx->getChunk($chunk)));
// удаляем возможные пустые значения
$tv_val_arr=array_diff($tv_val_arr, array(0, null));
$items_list = array_diff($items_list, array(0, null));
$items_count=count($items_list);
for($i=0;$i<$items_count;$i++) {
list($itemvalue,$item)=explode('==',$items_list[$i]);
$items[$item]=$itemvalue;
}
foreach($tv_val_arr as $k => $v) {
$items_all[]= $items[$v];
}
// здесь можно изменить формат вывода
return implode(', ',$items_all);
} else {
return $text;
}