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 は、フォーム タグの前に FormIt フォーム定義で呼び出されます。

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

最初に呼び出されたプリフック「getMaxYear」で単純な入力フィールドの値を設定することに成功しました。それがどのように機能するかは明らかですが、選択フィールドでは状況があまり明確ではありません。MODX RTFM によると、次のように、配列を json エンコードすることによって行う必要があります。

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

これでエラーは発生しませんが、空の選択フィールドが残ります。

ここで何かを見落としているに違いありません。これをやろうとしている方法がうまくいかないことは想像できます。しかし、私は今立ち往生しています。

これを達成するために誰かが私を正しい方向に向けることができますか?

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 タグ内で呼び出します。

<select name="arrangement" id="arrangement">
    [[!getArrangementOptions]]
</select>

それはどれほど簡単でしょうか:)

于 2015-12-02T16:02:29.143 に答える