установить метки выбора поля выбора с помощью prehook в MODX

На сайте 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;

Это не вызывает ошибок, но оставляет пустое поле выбора.

Должно быть, я что-то упускаю из виду, я могу представить, что способ, которым я пытаюсь это сделать, не работает. Но я застрял прямо сейчас.

Может ли кто-нибудь указать мне правильное направление для достижения этой цели?

0

Решение

FormItIsSelected хочет числовой массив, и вы используете ассоциативный массив. Используйте следующий код, чтобы выбрать опцию 0.

<?php
$arrangements = array('0');
$hook->setValue('arrangement',json_encode($arrangements));
return true;
1

Другие решения

Вероятно, мое окончательное решение полезно для других с тем же вопросом:
Я сделал фрагмент под названием «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>

Как легко это может быть 🙂

0

По вопросам рекламы [email protected]