Konfigurasi 'tergantung' dengan model depan dan belakang


8

Saya mengalami kesulitan dengan fungsionalitas 'tergantung' dalam konfigurasi.

Biasanya, menambahkan <depends>ke beberapa opsi konfigurasi, itu disembunyikan kecuali nilai opsi yang diberikan cocok.

Sebagai contoh:

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

Jelas saya kehilangan beberapa bidang, tetapi Anda mengerti maksudnya. Opsi 2 hanya muncul ketika Opsi 1 memiliki nilai '1'.

Sekarang masalah saya adalah, ketika saya mencoba menerapkan ini pada opsi dengan model backend dan frontend, ini tergantung tidak bekerja:

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

Opsi ini tidak akan mengambil Opsi 1 di akun, itu selalu terlihat.

Apakah saya melakukan sesuatu yang salah, atau ini bug, atau 'berfungsi sebagaimana dirancang'?

Jawaban:


8

Jika Anda tidak menggunakan frontend_modelhtml Anda untuk dua bidang akan terlihat seperti ini

<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 untuk menampilkan / menyembunyikan bidang bergantung akan terlihat seperti ini

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

Dan tampilkan / sembunyikan akan berfungsi dengan baik karena kedua id hadir dalam html.

Tetapi jika Anda menggunakan frontend_modelnilai untuk bidang kedua diberikan oleh blok kustom Anda module/adminhtml_form_field_testdan tidak mengandung id bidang dependen dan javascript tidak tahu apa yang harus disembunyikan.

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

Jadi pergi ke metode _toHtml () module/adminhtml_form_field_testdan bungkus output ke dalam divdan tentukan id untuk itu

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

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

Belum menguji ini, tapi kedengarannya sah. Sepertinya bug bagi saya. Saya tidak menimpa _toHtml dalam model khusus saya, tetapi saya pikir saya akan menulis ulang metode ini untuk mencegah hal ini terjadi di masa depan!
— Maikel Koek

Anda Tuan, adalah seorang pria dan sarjana. Membungkus output dari frontend_model dengan '<div id = "'. $ This-> getElement () -> getId (). '">' Benar-benar berfungsi.
— Luke A. Leber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.