Domanda

So che per creare una dipendenza per i campi è possibile utilizzare il nodo

<depends />
.

Detto questo, ho provato diversi modi per creare una dipendenza da un gruppo, ma non riesco a trovare un modo per far sì che Magento usarlo, sul codice di forma attuale.php menziona

$dependent->fieldset
.

Quindi potrebbe essere lì ma non sono stato in grado di sfruttarelo.

Modifica: su ulteriori indagini Sembra che loop attraverso i campi per leggere dipendenze poiché su mage_adminhtml_block_system_config_form :: initfields ()

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

sarebbe ancora una buona cosa sapere come raggiungere questo

È stato utile?

Soluzione

Puoi mettere JavaScript nell'area dei commenti.Può essere qualcosa del genere:

<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>
.

Sostituisci "Sezione_groups_value", "Some_Value" e "Sections_Groups" di conseguenza.

Altri suggerimenti

Prima di tutto, ho bisogno di chiarimenti sulla tua dicitura al di sotto.

.

Ho provato diversi modi per creare una dipendenza da gruppo

Stai davvero cercando di ottenere Dependency del gruppo di Dependency del campo ?

Per rendere il punto più più chiaro, groups e fields è diverso nella configurazione del sistema. Gruppi significa una raccolta di campi correlati.

Una raccolta di fields correlata costituisce un group. Una raccolta di gruppi correlati costituisce un section e una raccolta di tali sezioni costituiscono l'intera pagina di configurazione del sistema.

Se stai parlando di dipendenza da campo, allora questo link è un buon punto di partenza .

Se hai davvero bisogno di vedere un esempio in tempo reale, puoi guardare nel modulo Mage_Customer. Ci sono all'interno app/code/core/Mage/Customer/etc/system.xml, puoi trovare la definizione per il Gruppo create_account. Puoi vedere che più di un campo in quel gruppo dipende da un campo con il nome auto_group_assign. Se segui la stessa convenzione per dichiarare i campi personalizzati, puoi facilmente ottenere ciò che vuoi veramente.

.

Disclaimer: - La sezione seguente si basa sulla mia osservazione e può o potrebbe non essere corretto. Se sbaglio, per favore correggimi: -)

Dal tuo Modifica , posso vedere che sei nella direzione giusta. Mi piacerebbe dare una piccola spiegazione su questa parte.

Il metodo che hai referenziato è Mage_Adminhtml_Block_System_Config_Form::initFields(). Mage_Adminhtml_Block_System_Config_Form è una classe che viene utilizzata per costituire il modulo di configurazione del sistema. initFields() è un metodo che viene utilizzato per generare campi in un particolare gruppo.

Se guardi da vicino a questo metodo, puoi trovare tre anelli. Sotto sto mostrando la loro struttura

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) {
            }
        }
    }
}
.

Qui il primo foreach Loop raccoglie campi che entrano in un particolare gruppo (o fieldset). Questa collezione viene generata dalla configurazione XML effettuata tramite il file system.xml. Quindi la collezione di campo che $group->fields tiene un array non esortato. Quindi il metodo initField() esegue un ordinamento e tenere i campi ordinati come array in $elements. Quindi il secondo ciclo foreach è di nuovo looping attraverso una serie di campi ordinati.

Un sacco di cose accadono all'interno di questo ciclo. Non ho intenzione di spiegare cosa succede esattamente lì. Tuttavia la nostra area di interesse è la prossima sezione foreach Loop. Prima di eseguire questo ciclo, il metodo initFields() controlla la dipendenza da un campo if ($element->depends). Quindi la dipendenza è specificata, itara attraverso quei campi a seconda dei campi. ($element->depends->children() genera effettivamente una matrice di campi a seconda dei campi. I campi su cui il campo corrente dipende).

Aspetta ... Itona attraverso una raccolta di campi a seconda dei campi !!!! Significa che, possiamo avere più numeri di dipendenza da campo per un particolare campo . In questo momento ho bisogno di specificare che mi riferisco a Magento 1.9.1. Questa funzione non è disponibile nelle versioni precedenti, penso. (Da Magento 1.7, è possibile più dipendenza da campo, penso).

E questo è tutto. Questo è il modo in cui la dipendenza dal campo sta elaborando in Magento. Otterrai maggiori dettagli sul link specificato sopra. Ho appena fatto il punto chiaro.

Per Magento 2.1.x, è possibile utilizzare il seguente jQuery per attivare i gruppi di configurazione dipendenti dipendenti:

<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>]]>
.

Sostituisci gli ID dove necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top