在MODX中使用prehook设置选择字段选项标签

时间:2015-12-02 12:24:27

标签: php forms hook modx-revolution formit

在MODX Revo网站中,我有一个FormIt表单,其中一个select字段应如下所示:

<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 prehook设置选项,称为'getArrangements'。

在表单标记之前的FormIt表单定义中调用prehook:

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

我成功设置了一个简单输入字段的值,第一个名为prehook'getMaxYear',我很清楚它是如何工作的,但是对于select字段,事情就不太清楚了。根据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;

这不会产生错误,但它会留下一个空的选择字段。

我必须在这里忽略一些东西,我可以想象我试图这样做的方式不起作用。但我现在卡住了。

有人能指出我正确的方向来实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

FormItIsSelected想要一个数值数组并使用关联数组。使用以下代码选择选项0。

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

答案 1 :(得分:0)

可能我的最终解决方案适用于有同样问题的其他人: 我制作了一个名为&#39; getArrangementOptions&#39;:

的片段
mutable

在select标签内调用它:

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

它有多容易:)