На сайте MODX Revo у меня есть форма FormIt с полем выбора, которое должно выглядеть следующим образом:
<select name="arrangement" id="arrangement">
<option value="0" [[!+fi.arrangement:FormItIsSelected=`0`]]>Arrangement 0</option>
<option value="1" [[!+fi.arrangement:FormItIsSelected=`1`]]>Arrangement 1</option>
<option value="2" [[!+fi.arrangement:FormItIsSelected=`2`]]>Arrangement 2</option>
Я хотел бы установить параметры с предварительным крюком FormIt, называемым «getArrangements».
Предварительный крюк вызывается в определении формы FormIt перед тегами формы:
[[!FormIt?
&preHooks=`getMaxYear,getArrangements`
Мне удалось установить значение простого поля ввода с первым prehook ‘getMaxYear’, мне понятно, как это работает, но с полем выбора все не так ясно. В соответствии с RTFM MODX это должно быть сделано путем json-кодирования массива, например:
$hook->setValue('hobbies',json_encode(array('music','films','books')));
Я удалил теги параметров из выделенного HTML и создал фрагмент с именем ‘getArrangements’:
<?php
$arrangements = array( '0' => 'Arrangement 0',
'1' => 'Arrangement 1',
'2' => 'Arrangement 2');
$hook->setValue('arrangement',json_encode($arrangements));
return true;
Это не вызывает ошибок, но оставляет пустое поле выбора.
Должно быть, я что-то упускаю из виду, я могу представить, что способ, которым я пытаюсь это сделать, не работает. Но я застрял прямо сейчас.
Может ли кто-нибудь указать мне правильное направление для достижения этой цели?
FormItIsSelected хочет числовой массив, и вы используете ассоциативный массив. Используйте следующий код, чтобы выбрать опцию 0.
<?php
$arrangements = array('0');
$hook->setValue('arrangement',json_encode($arrangements));
return true;
Вероятно, мое окончательное решение полезно для других с тем же вопросом:
Я сделал фрагмент под названием «getArrangementOptions»:
$arrangements = array( '0' => 'Arrangement 0',
'1' => 'Arrangement 1',
'2' => 'Arrangement 2');
$output = '';
foreach ($arrangements as $key => $value) {
$output .= '<option value="'.$key.'" [[!+fi.arrangement:FormItIsSelected=`'.$key.'`]]>'.$value.'</option>';
}
return $output;
И назовите его внутри тегов выбора:
<select name="arrangement" id="arrangement">
[[!getArrangementOptions]]
</select>
Как легко это может быть 🙂