Dépendance du champ system.xml

16

Vous pouvez donc définir dans le system.xmlfichier d'un module une dépendance entre les champs en ajoutant une <depends>balise dans l'un des champs.

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

Le code ci-dessus signifie que field2sera affiché lorsque la valeur de field1est 1. Je veux savoir comment / si je peux dire à Magento de montrer field2si la valeur de field1est1 OU 2?

Marius
la source

Réponses:

29

Essaye ça:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>
Alexandre
la source
Savez-vous que cela fonctionne, ou est-ce que vous le publiez simplement?
benmarks
1
Mec ... Je ne sais pas comment, mais ça marche vraiment. Maintenant, j'ai honte et désolé pour toutes mes mauvaises paroles que j'ai dites aux gars qui ont implémenté la section config. Pour une raison quelconque, $dependent['separator']renvoie la valeur de l'attribut separator. À tous ceux qui ont rétrogradé cela, veuillez voter (deux fois si possible). Marche parfaitement. Merci. cc @benmarks
Marius
1
Cela fonctionne! = C'est une bonne idée. Je pense qu'il n'y a pas besoin de s'excuser pour vos mots :-D
benmarks
7

[ÉDITER]

J'avais tort dans ma réponse ci-dessous. Je ne le supprimerai pas (encore) car j'ai reçu 7 votes positifs :). Mais je suis en train de le modifier pour que vous ayez tous la possibilité de retirer votre vote (même de le voter, car je le mérite).

Réponse originale

Ha! .. Je l'ai trouvé.
Réponse courte: vous ne pouvez pas!
Réponse longue : Vous devriez pouvoir le faire si quelqu'un avait connu la différence entre un tableau et un objet.
En théorie, cela devrait fonctionner

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

Mais dans le code qui gère la dépendance, Mage_Adminhtml_Block_System_Config_Form::initFieldsautour de la ligne 366, il y a ce code

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

$dependentest toujours un objet et $dependent['separator']n'est donc jamais défini.
Si je change le code ci-dessus en

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

tout fonctionne bien.
Je suppose que je ne peux pas changer le cœur juste pour une extension donc je dois créer 2 champs au lieu de 1, un pour chaque valeur field1ou créer un js personnalisé qui gère cela et l'ajouter à la page de configuration.

Marius
la source
2
Bon sang. Je connais ce genre de bugs :-) J'espère que vous l'avez signalé? Grande perspicacité!
Fabian Blechschmidt
1
Oh mec, c'est une grande enquête, tu es sûr que tu n'es pas Sherlock? +1 pour l'avoir signalé.
David Manners
2
@DavidManners élémentaire mon cher watson
Marius