Вывод значения из tv поля переключатели (radio)

Всем привет, такая ситуация сложилась. Есть значения в tv поле:
Красный==1||Белый==2, я вывожу через [[*pole]] и выводится 1 или 2, а как сделать так чтобы всё это осталось но выводились не цифры а цвета? Подскажите пожалуйста, заранее всем спасибо!
Владислав
25 июня 2020, 16:54
modx.pro
767
0

Комментарии: 6

Руслан Алеев
25 июня 2020, 18:25
0
Привет, можно было и задавать цвета в TV, например так:
Красный==Красный||Белый==Белый
или
Красный==#ff0000||Белый==#ffffff
Но не понятно, что вы имеете в виду под
как сделать так чтобы всё это осталось
    Владислав
    25 июня 2020, 18:44
    0
    Чтобы сохранить ==1 и ==2, цифры нужно сохранить, к ним привязан функционал
      Руслан Алеев
      25 июня 2020, 19:17
      0
      Можно использовать фильтры ввода вывода, будет так:
      [[*pole:is=`1`:then=`Красный`:else=`Белый`]]
      Подробнее — docs.modx.pro/sistema/osnovyi/filtryi-vvoda-i-vyivoda
      Ну или писать сниппет, если много вариантов.
        Владислав
        25 июня 2020, 19:21
        0
        А есть примеры сниппетов? Может сталкивались с этим?
          Руслан Алеев
          25 июня 2020, 19:27
          0
          Ну это простой сниппет, получаете в сниппет значение вашего [[*pole]], пишите логику и возвращаете то, что нужно. См. docs.modx.com/current/ru/extending-modx/snippets#peredacha-znacheniy-v-snippet
            Максим
            25 июня 2020, 23:03
            +1
            Насколько я понимаю вам нужен сниппет с таким вызовом:
            [[!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;
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6