配置“取决于”前端和后端模型


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

显然,我缺少一些领域,但是您明白了。仅当选项1的值为“ 1”时,选项2才会出现。

现在我的问题是,当我尝试将其应用于带有后端和前端模型的选项时,这种依赖不起作用:

<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,它始终可见。

我是在做错什么,还是一个错误,还是“按设计工作”?

Answers:


8

如果您不frontend_model将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第二个字段的值,则该字段由您的自定义块呈现,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并将输出包装到其中div并为其指定ID

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

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

尚未测试,但这听起来合法。对我来说似乎是个虫子。我没有在自定义模型中覆盖_toHtml,但我想我将重写此方法以防止将来发生这种情况!
Maikel Koek 2014年

先生,您是一位绅士和学者。用'<div id =“'包装frontend_model的输出。$ this-> getElement()-> getId()。'”>'绝对有效。
路加·莱伯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.