[EVO] [Решено] Выводить из TV типа чекбокс значения в class

Есть ТВ параметр resttype
Пляжный==c_beach||Экскурсионный==c_exc||Оздоровительный==c_health||Горнолыжный==c_ski

Вывожу его через DocLister, он выводится в таком виде:
c_beach||c_exc||c_health

Подскажите как вывести в таком виде эти значения?
<span class="c_ico c_beach"></span>
<span class="c_ico c_exc"></span>
<span class="c_ico c_health"></span>


Наверное надо какой-то снипет куда можно этот тв отправить и там распарсить и использовать в нужном виде? Если есть поделитесь ссылкой, пожалуйста.
Или возможно есть какое-то другое решение?

11 комментариев

avatar
Создаете такой сниппет
$plh = $data;
$tmp = explode('||', $data['resttype']);
$html = '';
foreach($tmp as $item){
	$plh['resttype'] = $item;
	$tpl = $_DocLister->getCFGDef('resttypeTPL', '@CODE: <span class="c_ico [+resttype+]"></span>');
	$html .= $_DocLister->parseChunk($tpl, $plh);
}
$data['resttype.html'] = $html;
return $data;

И указываете его имя в prepare параметре к вызову DL. Еще одним параметром resttypeTPL можете управлять шаблоном для преобразования resttype. По умолчанию он такой
<span class="c_ico [+resttype+]"></span>
avatar
Суть понимаю, но не до конца понимаю что делать.
Снипет prepare сделал.

Вот так вызываю DocLister
[[DocLister? 
	&parents=`[*id*]` 
	&tvList=`image,capital,visa,resttype,сurrency` 
	&tpl=`country_one.dl.tpl`
	&prepare=`prepareResttype`
	&orderBy=`pagetitle ASC`]]


Вот чанк country_one.dl.tpl
<div class="country_one">
	<a href="[+url+]" class="c_name">
		<img src="[[phpthumb? &input=`[+tv.image+]` &options=`w=22,h=16,zc=1,q=90`]]" width="22" height="16" alt="[+pagetitle+]" />
		[+pagetitle+]
	</a>
	<div class="c_capital">[+tv.capital+]</div>
	<a href="#" class="c_visa">[+tv.visa+]</a>
	<div class="c_rest_type">
		<span class="c_ico c_exc"></span>
		<span class="c_ico c_health"></span>
		<span class="c_ico c_ski"></span>
	</div>
	<div class="c_time_diff">1 Москва</div>
	<div class="c_currency">[+tv.сurrency+]</div>
</div>


Не соображаю чем этот код заменить
<span class="c_ico c_exc"></span>
		<span class="c_ico c_health"></span>
		<span class="c_ico c_ski"></span>


Он теперь должен генерироваться в prepare снипете, а вместо него нужно в чанк country_one.dl.tpl поставить какойто плейсхолдер?

Пробую ставить так [+tv.resttype+] — выводится это c_beach||c_exc||c_health
Пробую ставить [+resttype+] — не выводится ничего.

Подскажите что не так делаю?
avatar
[+resttype.html+]
avatar
Чтото начало работать, но не совсем так как надо.
Поставил [+resttype.html+]

Теперь стало выводить так
<span class="c_ico "></span>


В админке для документа стоит 2 чекбокса


По идее должно выводиться так
<span class="c_ico c_beach"></span>
<span class="c_ico c_health"></span>


Что может быть не так?
avatar
Вместо $plh['resttype'] = $item; нужно
<code>
$plh['resttype'] = array_pop(explode('==',$item));
</code>
А значения tv должны быть Пляжный==c_beach||Оздоровительный==с_health и т.п.
Комментарий отредактирован 2014-11-13 17:20:18 пользователем Pathologic
avatar
В сниппете на второй строке нужно $data['resttype'] заменить на $data['tv.resttype']
avatar
Спасибо! Работает!
avatar
а можно ещё воспользоваться сниппетом ddgetmultiplefield
code.divandesign.ru/modx/ddgetmultiplefield
avatar
вот тут аналогичное решение
avatar
Подскажите если тут так
$tpl = $_DocLister->getCFGDef('resttypeTPL', '@CODE: [+resttype+]');

как сделать что бы [+resttype+] через пробел шли а не слитно
avatar
Да хоть как, к примеру вместо
$plh['resttype'] = $item;

сделать
$plh['resttype'] = $item.' ';
Комментарий отредактирован 2021-10-27 11:19:13 пользователем Aharito
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.