Вывод значения из tv поля переключатели (radio)
Всем привет, такая ситуация сложилась. Есть значения в tv поле:
Красный==1||Белый==2, я вывожу через [[*pole]] и выводится 1 или 2, а как сделать так чтобы всё это осталось но выводились не цифры а цвета? Подскажите пожалуйста, заранее всем спасибо!
Красный==1||Белый==2, я вывожу через [[*pole]] и выводится 1 или 2, а как сделать так чтобы всё это осталось но выводились не цифры а цвета? Подскажите пожалуйста, заранее всем спасибо!
Комментарии: 6
Привет, можно было и задавать цвета в TV, например так:
Красный==Красный||Белый==Белый
или Красный==#ff0000||Белый==#ffffff
Но не понятно, что вы имеете в виду под как сделать так чтобы всё это осталось
Чтобы сохранить ==1 и ==2, цифры нужно сохранить, к ним привязан функционал
Можно использовать фильтры ввода вывода, будет так:
Ну или писать сниппет, если много вариантов.
[[*pole:is=`1`:then=`Красный`:else=`Белый`]]
Подробнее — docs.modx.pro/sistema/osnovyi/filtryi-vvoda-i-vyivodaНу или писать сниппет, если много вариантов.
А есть примеры сниппетов? Может сталкивались с этим?
Ну это простой сниппет, получаете в сниппет значение вашего [[*pole]], пишите логику и возвращаете то, что нужно. См. docs.modx.com/current/ru/extending-modx/snippets#peredacha-znacheniy-v-snippet
Насколько я понимаю вам нужен сниппет с таким вызовом:
1) Получать TV по полю name из таблицы modx_site_tmplvars
2) Получать у данной TV и парсить данные из поля elements. Хранятся они там так: Красный==1||Синий==2
3) Находим нужное и возвращаем.
А теперь кодом (просто наброски для наглядности. Не является готовым решением):
[[!mySnyppet?&tvname=`pole`&tvvalue=`[[*pole]]`
Сам же сниппет должен делать следующее:1) Получать TV по полю name из таблицы modx_site_tmplvars
2) Получать у данной TV и парсить данные из поля elements. Хранятся они там так: Красный==1||Синий==2
3) Находим нужное и возвращаем.
А теперь кодом (просто наброски для наглядности. Не является готовым решением):
// Получаем TV
$tv = $modx->getObject('modTemplateVar', array('name' => $tvname));
if (empty($tv)) {return;}
// Получаем данные
$el = $tv->get('elements');
if (empty($el)) {return;}
$elements = explode('||', $el);
$output = '';
foreach ($elements as $elenemt) {
// Перед использованием list ознакомьтесь с документацией
list($label, $value) = explode('==', $element);
if ($value == $tvvalue) {
$output = $label;
break;
}
}
return $output;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.