2015-12-02 5 views
0

В сайте MODX Revo, у меня есть форма ФОРМИТ с полем выбора, который должен выглядеть следующим образом:Выберите набор опций поля метко с prehook в MODX

<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> 

Я хотел бы установить варианты с Prehook FormIt, называемые «getArrangements».

prehook называется в определении формы ФОРМИТ до формы тегов:

[[!FormIt? 
    &preHooks=`getMaxYear,getArrangements` 

мне удалось установить значение простого поля ввода с первым названием prehook «getMaxYear», то ясно мне как это работает, но с полем выбора вещи менее ясны. Согласно MODX RTFM это должно быть сделано с помощью 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; 

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

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

Может ли кто-нибудь указать мне в правильном направлении, чтобы выполнить это?

ответ

1

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

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

Спасибо вам r быстрый ответ Jako! Теперь я обнаружил, что этот фрагмент просто активирует выбранный параметр. То, что я хотел выполнить, было создание самих опций с помощью фрагмента prehook. Я предполагаю, что мне нужно будет создать код для создания полных тегов параметров со значениями, верно? – Yannnd

0

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

Как легко может быть :)