Gruppi dipendenti sulla configurazione del sistema
-
12-12-2019 - |
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
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
efields
è diverso nella configurazione del sistema. Gruppi significa una raccolta di campi correlati.Una raccolta di
fields
correlata costituisce ungroup
. Una raccolta di gruppi correlati costituisce unsection
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'internoapp/code/core/Mage/Customer/etc/system.xml
, puoi trovare la definizione per il Gruppocreate_account
. Puoi vedere che più di un campo in quel gruppo dipende da un campo con il nomeauto_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 filesystem.xml
. Quindi la collezione di campo che$group->fields
tiene un array non esortato. Quindi il metodoinitField()
esegue un ordinamento e tenere i campi ordinati come array in$elements
. Quindi il secondo cicloforeach
è 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 metodoinitFields()
controlla la dipendenza da un campoif ($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.