Как вывести в шаблоне ресурса TV поле типа List c Options/Values
Здравствуйте, я недавно с Modx поэтому прошу совета знатоков
В документации про типы TV полей сказано что я могу для типа ввода List указать раздельно значения Options/Values таким образом:
Я начал велосипедить и в сниппете получать сначала все значения поля List, затем получать выбранное значение, затем путем сравнивавания циклом проходить по массиву и тд, и все это только чтобы получить одно значение value.
В документации про типы TV полей сказано что я могу для типа ввода List указать раздельно значения Options/Values таким образом:
Option 1==value1||Option 2==value2
Однако по умолчанию плейсхолдер [[*FieldTV]] выводит название опции, и я ни как не могу найти информацию про то как получить именно value выбранной опции.Я начал велосипедить и в сниппете получать сначала все значения поля List, затем получать выбранное значение, затем путем сравнивавания циклом проходить по массиву и тд, и все это только чтобы получить одно значение value.
<?php
function searchValue($option, $array) {
foreach ($array as $key => $val) {
if (strpos($val, $option) !== false) {
$el = explode('==',$val);
echo $el[1];
}
}
return null;
}
$tvtag = 'MyFieldTV';
$pageid = '38';
$tv = $modx->getObject('modTemplateVar',array('name'=>$tvtag));
// все опции
$options = explode('||',$tv->get('elements'));
// ключ опции выбранный в ресурсе
$optionKey = $tv->getValue($pageid);
echo searchValue($optionKey,$options);
Может быть есть какое-то более рациональное и простое решение о котором я не знаю? Комментарии: 2
Я как то не понял в чем проблема. то ли в имени самого ТВ то ли в значении ТВ то ли в текстовом соответствии ТВ.
обычно значение ТВ для текущего ресурса так и будет: [[*myTvName]] тут будет value1 или value2.
Если у вас тв-список, и вам нужно название значения соответствующего (Option 1==value1||Option 2==value2)
те хотите получить текст Option 1 или Option 2… То есть модификатор (в доке естессно есть оно) :tvLabel Вызывается прямо так: [[*myTvName:tvLabel]]
Ну и название самого ТВ уже точно нужно получать своим скриптом Прямого решения, нет.
надеюсь угадал что вы хотели сделать. если нет — Опишите детальнее. Успехов.
обычно значение ТВ для текущего ресурса так и будет: [[*myTvName]] тут будет value1 или value2.
Если у вас тв-список, и вам нужно название значения соответствующего (Option 1==value1||Option 2==value2)
те хотите получить текст Option 1 или Option 2… То есть модификатор (в доке естессно есть оно) :tvLabel Вызывается прямо так: [[*myTvName:tvLabel]]
Ну и название самого ТВ уже точно нужно получать своим скриптом Прямого решения, нет.
надеюсь угадал что вы хотели сделать. если нет — Опишите детальнее. Успехов.
Да, все оказалось немного не так как я себе представлял а намного проще. Спасибо что навели меня на правильную мысль. Со мной сыграло злую шутку кеширование поэтому я никак не мог получить верное value, но после всех чисток все стало на свои места: (Option1==value1||Option2==value2) в этом примере получаем value так [[*myTvName]], а option так [[*myTvName:tvLabel]] и никакого сниппета и кода больше не нужно! Спасибо
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.