Question

Je sais que pour créer une dépendance pour les champs il est possible d'utiliser le nœud

<depends />

Cela dit, j'ai essayé plusieurs façons de créer une dépendance de groupe, mais je n'arrive pas à trouver un moyen de faire en sorte que Magento l'utilise, sur le code Form.php qu'il mentionne.

$dependent->fieldset

Il est donc possible que ce soit là, mais je n'ai pas réussi à l'exploiter.

Modifier:Après une enquête plus approfondie, il semble qu'il parcourt uniquement les champs pour lire les dépendances depuis Mage_Adminhtml_Block_System_Config_Form::initFields()

foreach ($group->fields as $elements) {

Ce serait quand même une bonne chose de savoir comment y parvenir

Était-ce utile?

La solution

Vous pouvez mettre JavaScript dans la zone de commentaire.Cela peut être quelque chose comme ceci:

<comment><![CDATA[
    <script type="text/javascript">
        document.observe("dom:loaded",function(){
            if($('sections_groups_value').value != some_value){
                 Element.up($('sections_groups')).hide();
            }
        });
        Event.observe('sections_groups_value', 'change', function(){
            if(this.value != some_value){
                Element.up($('sections_groups')).hide();
            }else if(this.value == some_value){
                Element.up($('sections_groups')).show();
            }
        })
    </script>]]>
</comment>

Remplacez "SECTIONS_GROUPS_VALUE", "ONE_VALUE" et "SECTIONS_GROUPS" en conséquence.

Autres conseils

Tout d'abord, j'ai besoin de précisions sur votre formulation ci-dessous.

J'ai essayé plusieurs façons de créer une dépendance de groupe

Essayez-vous vraiment d'atteindre dépendance de groupe de dépendance du champ ?

Pour rendre le propos plus clair, groups et fields sont différents dans la configuration du système.Les groupes désignent une collection de champs liés.

Une collection de connexes fields constituer un group.Un ensemble de groupes apparentés constitue un section et la collection de ces sections constitue la page entière de configuration du système.

Si vous parlez de dépendance aux champs, alors ceci le lien est un bon point de départ.

Si vous avez vraiment besoin de voir un exemple en temps réel, vous pouvez consulter Mage_Customer module.Là à l'intérieur app/code/core/Mage/Customer/etc/system.xml, vous pouvez trouver la définition du groupe create_account.Vous pouvez voir que plusieurs champs de ce groupe dépendent d'un champ portant le nom auto_group_assign.Si vous suivez la même convention pour déclarer vos champs personnalisés, vous pouvez alors facilement obtenir ce que vous voulez vraiment.

Avis de non-responsabilité :- La section suivante est basée sur mon observation et il se peut qu’elle ou peut ne pas être correct.Si je me trompe, corrigez-moi :-)

De ton modifier, je vois que vous êtes dans la bonne direction. C'est pourquoi je voudrais donner une petite explication sur cette partie.

La méthode que vous avez référencée est Mage_Adminhtml_Block_System_Config_Form::initFields(). Mage_Adminhtml_Block_System_Config_Form est une classe utilisée pour constituer le formulaire de configuration du système. initFields() est une méthode utilisée pour générer des champs dans un groupe particulier.

Si vous examinez attentivement cette méthode, vous pouvez trouver trois boucles.Ci-dessous je montre leur structure

foreach ($group->fields as $elements) {

    //doing sorting on fields in a specific group and 
    //store sorted array of fields in $elements.

    foreach ($elements as $element) {

        //more more codes

        if ($element->depends) {
            foreach ($element->depends->children() as $dependent) {
            }
        }
    }
}

Ici d'abord foreach La boucle collecte les champs entrant dans un groupe particulier (ou un ensemble de champs).Cette collection est générée à partir de la configuration XML effectuée via system.xml déposer.Donc une collecte sur le terrain qui $group->fields contient un tableau non trié.Ainsi initField() méthode effectuant ensuite un tri et conservant les champs triés sous forme de tableau dans $elements.Alors la deuxième foreach la boucle parcourt à nouveau un tableau trié de champs.

Beaucoup de choses se produisent dans cette boucle.Je ne vais pas expliquer ce qui s’y passe exactement.Cependant notre domaine d'intérêt est le suivant foreach section en boucle.Avant que cette boucle ne s'exécute, initFields() la méthode vérifie la dépendance d'un champ if ($element->depends).Ainsi, la dépendance est spécifiée, elle parcourt ces champs dépendants.($element->depends->children() génère en fait un tableau de champs dépendants.c'est-à-dire les champs dont dépend le champ actuel).

Attendez...il parcourt une collection de champs dépendants !!!!Cela signifie que, nous pouvons avoir plusieurs nombres de dépendances de champ pour un champ particulier.A ce moment, je dois préciser que je fais référence à Magento 1.9.1.Cette fonctionnalité n'est pas disponible dans les anciennes versions, je pense.(à partir de magento 1.7, la dépendance à plusieurs champs est possible, je pense).

Et c'est tout.C'est ainsi que la dépendance des champs est traitée dans magento.Vous obtiendrez plus de détails sur le lien spécifié ci-dessus.Je viens de préciser le point.

Pour Magento 2.1.x, vous pouvez utiliser la suite suivante de JQuery pour basculer des groupes de configuration dépendants:

<comment><![CDATA[
<script type="text/javascript">//<![CDATA[
    require(['jquery'], function(){
        if (jQuery('#field_id').val() == 'value_to_compare') {
            toggleDependantGroups(true);
        }

        jQuery('#field_id').change(function() {
            if (jQuery(this).val() == 'value_to_compare') {
                toggleDependantGroups(true);
            } else {
                toggleDependantGroups(false);
            }
        });

        function toggleDependantGroups(hide=true)
        {
            if (hide) {
                jQuery('#section-id').closest('div.section-config').hide();
                jQuery('#section-id').closest('div.section-config').hide();
                jQuery('#last-visible-section-id').closest('div.section-config').css('border-bottom-width', '0px');
            } else {
            jQuery('#section-id').closest('div.section-config').show();
            jQuery('#section-id').closest('div.section-config').show();
            jQuery('#last-visible-section-id').closest('div.section-config').css('border-bottom-width', '1px');
            }
        }
    });
</script>]]>

Remplacer les identifiants si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top