在 MODX 中使用预挂钩设置 select 字段选项标签
set select field option tags with prehook in MODX
在 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>
我想使用名为 'getArrangements' 的 FormIt prehook 设置选项。
prehook 在 FormIt 表单定义中调用,在表单标签之前:
[[!FormIt?
&preHooks=`getMaxYear,getArrangements`
我成功地使用第一个调用的 prehook 'getMaxYear' 设置了一个简单输入字段的值,我很清楚它是如何工作的,但是对于 select 字段,事情就不太清楚了。根据 MODX RTFM,它应该通过 json-encoding 数组来完成,例如:
$hook->setValue('hobbies',json_encode(array('music','films','books')));
我从 select HTML 中删除了选项标签并创建了一个名为 'getArrangements' 的片段:
<?php
$arrangements = array( '0' => 'Arrangement 0',
'1' => 'Arrangement 1',
'2' => 'Arrangement 2');
$hook->setValue('arrangement',json_encode($arrangements));
return true;
这不会产生错误,但会留下一个空的 select 字段。
我一定是忽略了这里的某些东西,我可以想象我尝试这样做的方式是行不通的。但我现在卡住了。
有人能给我指出正确的方向来完成这个吗?
FormItIsSelected 想要一个数值数组,而您使用了一个关联数组。使用以下代码 select 选项 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 标签内调用它:
<select name="arrangement" id="arrangement">
[[!getArrangementOptions]]
</select>
谈何容易:)
在 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>
我想使用名为 'getArrangements' 的 FormIt prehook 设置选项。
prehook 在 FormIt 表单定义中调用,在表单标签之前:
[[!FormIt?
&preHooks=`getMaxYear,getArrangements`
我成功地使用第一个调用的 prehook 'getMaxYear' 设置了一个简单输入字段的值,我很清楚它是如何工作的,但是对于 select 字段,事情就不太清楚了。根据 MODX RTFM,它应该通过 json-encoding 数组来完成,例如:
$hook->setValue('hobbies',json_encode(array('music','films','books')));
我从 select HTML 中删除了选项标签并创建了一个名为 'getArrangements' 的片段:
<?php
$arrangements = array( '0' => 'Arrangement 0',
'1' => 'Arrangement 1',
'2' => 'Arrangement 2');
$hook->setValue('arrangement',json_encode($arrangements));
return true;
这不会产生错误,但会留下一个空的 select 字段。
我一定是忽略了这里的某些东西,我可以想象我尝试这样做的方式是行不通的。但我现在卡住了。
有人能给我指出正确的方向来完成这个吗?
FormItIsSelected 想要一个数值数组,而您使用了一个关联数组。使用以下代码 select 选项 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 标签内调用它:
<select name="arrangement" id="arrangement">
[[!getArrangementOptions]]
</select>
谈何容易:)