system.xml alan bağımlılığı


16

Böylece system.xmlbir modülün dosyasında, alanlardan <depends>birine bir etiket ekleyerek alanlar arasında bir bağımlılık ayarlayabilirsiniz .

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

Vasıtası yukarıda kod field2değeri olarak gösterilecektir field1olup 1. Ben göstermek için Magento söyleyebilirse / bilmek istiyorum field2değeri için eğer field1olduğunu 1YA 2?

Yanıtlar:


29

Bunu dene:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>

Bunun işe yaradığını biliyor musunuz, yoksa sadece oraya mı koyuyorsunuz?
benmarks

1
Dostum ... Nasıl olduğunu bilmiyorum, ama bu gerçekten işe yarıyor. Şimdi, yapılandırma bölümünü uygulayan adamlara söylediğim tüm kötü sözlerim için utanıyorum ve üzgünüm. Nedense $dependent['separator']özniteliğin değerini döndürür separator. Bunu kime indirdiği için lütfen oy verin (mümkünse iki kez). Mükemmel çalışıyor. Teşekkürler. cc @benmarks
Marius

1
Bu çalışma! = İyi bir fikir. Kelimeleriniz için özür dilemeye gerek olmadığını düşünüyorum :-D
benbers

7

[DÜZENLE]

Aşağıdaki cevabımda yanılmışım. Ben (henüz) silmeyeceğim çünkü bu konuda 7 upvotes var :). Ama ben onu düzenliyorum, böylece hepiniz oyunuzu geri çekme şansına sahip olursunuz (hatta oy verin, çünkü bunu hak ediyorum).

Orijinal Yanıt

Ha! .. Buldum.
Kısa cevap: Yapamazsınız!
Uzun cevap : Birisi bir dizi ile bir nesne arasındaki farkı bilseydi bunu yapabilmelisiniz.
Teoride bu işe yaramalı

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

Ancak bağımlılığı işleyen kodda, Mage_Adminhtml_Block_System_Config_Form::initFields366 satırı etrafında bu kod var

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

$dependenther zaman bir nesnedir, bu yüzden $dependent['separator']asla ayarlanmaz.
Yukarıdaki kodu değiştirirsem

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

her şey sorunsuz çalışıyor.
Ben sadece bir uzantı uğruna çekirdek değiştiremiyorum sanırım bu yüzden 1 yerine 2 alan, her değer için bir tane field1veya bunu ele ve yapılandırma sayfasına eklemek özel bir js oluşturmak zorunda.


2
Lanet olsun. Bu tür böcekleri biliyorum :-) Umarım bildirmişsinizdir? İyi fikir!
Fabian Blechschmidt

1
Ah adam bu harika bir soruşturma. Sherlock olmadığından emin misin? Bildirdiği için +1.
David Manners

2
@DavidManners ilköğretim benim sevgili watson
Marius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.