ketergantungan bidang system.xml

16

Jadi, Anda dapat mengatur dalam system.xmlfile modul ketergantungan antar bidang dengan menambahkan <depends>tag di salah satu bidang.

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>1</field1>
    </depends>
</field2>

Kode di atas berarti bahwa field2akan ditampilkan ketika nilai field1is 1. Saya ingin tahu bagaimana / jika saya bisa memberitahu Magento untuk menunjukkan field2jika nilai untuk field1adalah 1OR 2?

Marius
sumber

Jawaban:

29

Coba ini:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>
Alexander
sumber
Apakah Anda tahu ini bekerja, atau Anda hanya meletakkannya di sana?
patokan
1
Kawan ... Saya tidak tahu caranya, tetapi ini benar-benar berfungsi. Sekarang saya malu dan menyesal atas semua kata-kata buruk saya, saya katakan kepada orang-orang yang mengimplementasikan bagian konfigurasi. Untuk beberapa alasan $dependent['separator']mengembalikan nilai atribut separator. Kepada siapa pun yang pernah mengundurkan diri ini, harap angkat (dua kali jika mungkin). Bekerja dengan sempurna. Terima kasih. cc @benmarks
Marius
1
Ini berfungsi! = Itu ide yang bagus. Saya pikir tidak perlu meminta maaf atas kata-kata Anda :-D
tanda tanda
7

[EDIT]

Saya salah dalam jawaban saya di bawah ini. Saya tidak akan menghapusnya (karena) saya mendapat 7 upvotes pada ini :). Tapi saya mengeditnya sehingga Anda semua memiliki kesempatan untuk menarik kembali suara Anda (bahkan menurunkannya, karena saya layak mendapatkannya).

Jawaban Asli

Ha! .. Saya menemukannya.
Jawaban singkat: Anda tidak bisa!
Jawaban panjang : Anda harus bisa melakukannya jika seseorang tahu perbedaan antara array dan objek.
Secara teori ini harus bekerja

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>
           <value>1|2</value>
           <separator>|</separator>
       </field1>
    </depends>
</field2>

Tetapi dalam kode yang menangani ketergantungan, Mage_Adminhtml_Block_System_Config_Form::initFieldssekitar baris 366 ada kode ini

if (isset($dependent['separator'])) {
    $dependentValue = explode((string)$dependent['separator'], $dependentValue);
}

$dependentselalu merupakan objek jadi $dependent['separator']tidak pernah diatur.
Jika saya mengubah kode di atas menjadi

if (isset($dependent->separator)) {
    $dependentValue = explode((string)$dependent->separator, $dependentValue);
}

semuanya bekerja dengan lancar.
Saya kira saya tidak dapat mengubah inti hanya demi ekstensi jadi saya harus membuat 2 bidang, bukan 1, satu untuk setiap nilai dari field1atau membuat js kustom yang menangani ini dan menambahkannya ke halaman konfigurasi.

Marius
sumber
2
Sial. Saya tahu jenis bug ini :-) Saya harap Anda melaporkannya? Wawasan luar biasa!
Fabian Blechschmidt
1
Oh man itu adalah investigasi yang bagus, Anda yakin bukan Sherlock? +1 untuk melaporkannya.
David Manners
2
@DavidManners element my watson tercinta
Marius