0

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

我想使用名为“getArrangements”的 FormIt prehook 设置选项。

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

[[!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;

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

我必须在这里忽略某些东西,我可以想象我尝试这样做的方式行不通。但我现在被困住了。

有人能指出我正确的方向来完成这个吗?

4

2 回答 2

1

FormItIsSelected 需要一个数值数组,而您使用关联数组。使用以下代码选择选项 0。

<?php
$arrangements = array('0'); 
$hook->setValue('arrangement',json_encode($arrangements));
return true;
于 2015-12-02T14:17:56.863 回答
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>

这有多容易:)

于 2015-12-02T16:02:29.143 回答