Feldabhängigkeit system.xml

16

Sie können also in der system.xmlDatei eines Moduls eine Abhängigkeit zwischen Feldern festlegen, indem Sie <depends>in eines der Felder eine Variable einfügen.

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

Der obige Code bedeutet, field2dass angezeigt wird, wenn der Wert von field1ist 1. Ich möchte wissen , wie / ob ich Magento sagen zu zeigen , field2wenn der Wert für field1ist 1OR 2?

Marius
quelle

Antworten:

29

Versuche dies:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>
Alexander
quelle
Wissen Sie, dass dies funktioniert, oder setzen Sie es einfach da draußen?
benmarks
1
Alter ... Ich weiß nicht wie, aber das funktioniert tatsächlich. Jetzt schäme ich mich und entschuldige mich für all meine schlechten Worte, die ich den Jungs gesagt habe, die den Konfigurationsabschnitt implementiert haben. Aus irgendeinem Grund wird $dependent['separator']der Wert des Attributs zurückgegeben separator. Wem das schon mal runtergestimmt hat, bitte stimmen Sie hoch (wenn möglich zweimal). Funktioniert perfekt. Vielen Dank. cc @benmarks
Marius
1
Das funktioniert! = Es ist eine gute Idee. Ich denke, es gibt keinen Grund, sich für Ihre Worte zu entschuldigen :-D
benmarks
7

[BEARBEITEN]

Ich habe mich in meiner Antwort unten geirrt. Ich werde es (noch) nicht löschen, da ich 7 positive Bewertungen dazu habe :). Aber ich bearbeite es, damit Sie alle die Möglichkeit haben, Ihre Stimme zurückzuziehen (sogar, weil ich es verdient habe).

Ursprüngliche Antwort

Ha! .. Ich habe es gefunden.
Kurze Antwort: Das kannst du nicht!
Lange Antwort : Sie sollten es können, wenn jemand den Unterschied zwischen einem Array und einem Objekt gewusst hätte.
Theoretisch sollte dies funktionieren

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

In dem Code, der die Abhängigkeit behandelt, Mage_Adminhtml_Block_System_Config_Form::initFieldssteht dieser Code jedoch um Zeile 366

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

$dependentist immer ein Objekt, $dependent['separator']wird also nie gesetzt.
Wenn ich den obigen Code in ändere

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

alles funktioniert reibungslos.
Ich schätze, ich kann den Kern nicht nur für eine Erweiterung ändern, also muss ich 2 Felder anstelle von 1 erstellen, eines für jeden Wert aus field1oder ein benutzerdefiniertes js erstellen, das dies behandelt und es der Konfigurationsseite hinzufügt.

Marius
quelle
2
Verdammt. Ich kenne diese Art von Bugs :-) Ich hoffe du hast es gemeldet? Toller Einblick!
Fabian Blechschmidt
1
Oh Mann, das ist eine großartige Untersuchung. Bist du sicher, dass du kein Sherlock bist? +1 für das Melden.
David Manners
2
@ DavidManners elementar mein lieber Watson
Marius