Zależność pola system.xml

16

Możesz więc ustawić w system.xmlpliku modułu zależność między polami, dodając <depends>znacznik w jednym z pól.

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

Powyższy kod oznacza, że field2zostanie wyświetlony, gdy wartość parametru field1to 1. Chcę wiedzieć, w jaki sposób / jeśli mogę powiedzieć Magento, aby pokazał, field2czy wartość dla OR field1jest 1OR 2?

Marius
źródło

Odpowiedzi:

29

Spróbuj tego:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>
Alexander
źródło
Czy wiesz, że to działa, czy po prostu go wystawiasz?
zyskuje
1
Koleś ... nie wiem jak, ale to w rzeczywistości działa. Teraz wstydzę się i przepraszam za wszystkie moje złe słowa, które powiedziałem chłopakom, którzy wdrożyli sekcję konfiguracji. Z jakiegoś powodu $dependent['separator']zwraca wartość atrybutu separator. Do kogo kiedykolwiek to ocenił, proszę głosować (dwa razy, jeśli to możliwe). Działa świetnie. Dzięki. cc @benmarks
Marius
1
To działa! = To dobry pomysł. Myślę, że nie trzeba przepraszać za twoje słowa :-D
benmarks
7

[EDYTOWAĆ]

Myliłem się w mojej odpowiedzi poniżej. Nie usunę go (jeszcze), ponieważ mam na ten temat 7 głosów pozytywnych :). Ale edytuję to, abyście wszyscy mieli szansę wycofać swój głos (nawet głosować za jego przyjęciem, ponieważ na to zasługuję).

Oryginalna odpowiedź

Ha! .. znalazłem to.
Krótka odpowiedź: nie możesz!
Długa odpowiedź : powinieneś być w stanie to zrobić, gdyby ktoś znał różnicę między tablicą a obiektem.
Teoretycznie powinno to działać

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

Ale w kodzie, który obsługuje zależność, Mage_Adminhtml_Block_System_Config_Form::initFieldswokół linii 366 jest ten kod

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

$dependentjest zawsze przedmiotem, więc $dependent['separator']nigdy nie jest ustawiany.
Jeśli zmienię powyższy kod na

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

wszystko działa płynnie.
Chyba nie mogę zmienić rdzenia tylko ze względu na rozszerzenie, więc muszę utworzyć 2 pola zamiast 1, po jednym dla każdej wartości field1lub utworzyć niestandardowy plik js, który to obsługuje i dodać go do strony konfiguracji.

Marius
źródło
2
Cholera. Znam tego rodzaju błędy :-) Mam nadzieję, że to zgłosiłeś? Świetny wgląd!
Fabian Blechschmidt
1
Och, człowieku, to świetne śledztwo, czy na pewno nie jesteś Sherlockiem? +1 za zgłoszenie.
David Manners
2
@DavidManners elementarne mój drogi Watsonie
Marius