構成はフロントモデルとバックエンドモデルに「依存」します


8

構成の「依存」機能に問題があります。

通常、<depends>いくつかの構成オプションに追加されますが、指定されたオプションの値が一致しない限り、それは非表示になります。

例えば:

<option_one>
    <label>Option 1</label>
    ...
</option_one>
<option_two>
    <label>Option 2</label>
    ...
    <depends><option_one>1</option_one></depends>
</option_two

明らかに、いくつかのフィールドが欠けていますが、要点はわかります。オプション2は、オプション1の値が「1」の場合にのみ表示されます。

私の問題は、これをバックエンドモデルとフロントエンドモデルのオプションに適用しようとすると、これに依存しないことです。

<option_three>
    ...
    <frontend_model>module/adminhtml_form_field_test</frontend_model>
    <backend_model>adminhtml/system_config_backend_serialized_array</backend_model>
    ...
    <depends><option_one>1</option_one></depends>
</option_three>

このオプションはオプション1を考慮せず、常に表示されるだけです。

私は何か間違っているのですか、それともバグですか、それとも「設計どおりに機能する」のですか?

回答:


8

frontend_model2つのフィールドにhtmlを使用しない場合、次のようになります

<tr id="row_you_dependency_field_id">
    <td class="label"><label for="you_dependency_field_id">Dependency Field</label></td>
    <td class="value">
        <select id="you_dependency_field_id" name="groups[general][fields][you_dependency_field_id][value]" class=" select">
            <option value="1">Yes</option>
            <option value="0" selected="selected">No</option>
        </select>
    </td>
</tr>
<tr id="row_your_dependent_field_id">
    <td class="label">
        <label for="your_dependent_field_id">Dependent Field</label>
    </td>
    <td class="value">
         <select id="your_dependent_field_id" name="groups[general][fields][your_dependent_field_id][value]" class=" select">
             <option value="1">Yes</option>
             <option value="0" selected="selected">No</option>
         </select>
    </td>
</tr>

依存フィールドを表示/非表示にするJavaScriptは次のようになります

new FormElementDependenceController({"your_dependent_field_id":{"you_dependency_field id":"1"}});

また、両方のIDがHTMLに存在するため、表示/非表示は正常に機能します。

ただしfrontend_model、2番目のフィールドの値を使用する場合、カスタムブロックによってレンダリングされmodule/adminhtml_form_field_test、依存フィールドのIDが含まれておらず、JavaScriptは何を非表示にするかわかりません。

<tr id="row_you_dependency_field_id">
    <td class="label"><label for="you_dependency_field_id">Dependency Field</label></td>
    <td class="value">
        <select id="you_dependency_field_id" name="groups[general][fields][you_dependency_field_id][value]" class=" select">
            <option value="1">Yes</option>
            <option value="0" selected="selected">No</option>
        </select>
    </td>
</tr>
<tr id="row_your_dependent_field_id">
    <td class="label">
        <label for="your_dependent_field_id">Dependent Field</label>
    </td>
    <td class="value">
         ...
         //The output of your frontend_model
         ...
    </td>
</tr>

の_toHtml()メソッドに移動しmodule/adminhtml_form_field_test、出力をラップして、そのdivIDを指定します

$fieldId = $this->getElement()->getId();

//your html 
<div id="field id here">
    //your frontend_model html
</div>

これはまだテストしていませんが、合法に聞こえます。私にはバグのようです。私のカスタムモデルでは_toHtmlを上書きしませんでしたが、今後このようなことが起こらないように、このメソッドを書き換えると思います。
Maikel Koek、2014

あなたは、紳士で学者です。frontend_modelの出力を '<div id = "'でラップします。$ this-> getElement()-> getId()。 '">'は完全に機能します。
ルークA.レーバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.