Cấu hình 'phụ thuộc' với mô hình phía trước và phụ trợ


8

Tôi gặp khó khăn với chức năng 'phụ thuộc' trong cấu hình.

Thông thường, thêm <depends>vào một số tùy chọn cấu hình, nó sẽ bị ẩn trừ khi giá trị của tùy chọn đã cho khớp.

Ví dụ:

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

Rõ ràng là tôi đang thiếu một số lĩnh vực, nhưng bạn có được điểm. Tùy chọn 2 chỉ xuất hiện khi Tùy chọn 1 có giá trị '1'.

Bây giờ vấn đề của tôi là, khi tôi cố gắng áp dụng điều này cho một tùy chọn với mô hình phụ trợ và giao diện, điều này tùy thuộc vào công việc:

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

Tùy chọn này sẽ không có Tùy chọn 1 trong tài khoản, nó luôn luôn hiển thị.

Tôi đang làm gì đó sai, hay đây là một lỗi, hay 'hoạt động như thiết kế'?

Câu trả lời:


8

Nếu bạn không sử dụng frontend_modelhtml của mình cho hai trường sẽ như thế này

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

Các javascript để hiển thị / ẩn trường phụ thuộc sẽ trông như thế này

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

Và hiển thị / ẩn sẽ hoạt động tốt vì cả hai id đều có trong html.

Nhưng nếu bạn sử dụng frontend_modelgiá trị cho trường thứ hai được hiển thị bởi khối tùy chỉnh của bạn module/adminhtml_form_field_testvà không chứa id của trường phụ thuộc và javascript chỉ không biết phải ẩn gì.

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

Vì vậy, đi đến phương thức _toHtml () module/adminhtml_form_field_testvà bọc đầu ra vào divvà chỉ định id cho nó

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

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

Chưa kiểm tra điều này, nhưng nó có vẻ hợp pháp. Có vẻ như một lỗi với tôi. Tôi đã không ghi đè _toHtml trong mô hình tùy chỉnh của mình, nhưng tôi nghĩ rằng tôi sẽ viết lại phương pháp này để ngăn điều này xảy ra trong tương lai!
Maikel Koek

Bạn, quý ngài, một quý ông, và một học giả. Kết thúc đầu ra của frontend_model với '<div id = "'. $ This-> getEuity () -> getId (). '">' Hoàn toàn hoạt động.
Luke A. Leber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.