it-swarm.it

Come impostare correttamente il metodo $ form-> loadFile?

Nel mio plugin di sistema, sto usando il seguente per caricare il file xml delle opzioni predefinite per i modelli

function onContentPrepareForm($form, $data) {

    if (!($form instanceof JForm)){

    $this->_subject->setError('JERROR_NOT_A_FORM');
    }


    // Template defaults
    if ($form->getName() == 'com_templates.style') {
        JForm::addFormPath('pathtofolder');
        $form->loadFile('xmlfile', false, false , true);
    }
}

funziona bene

ora in templateDetails.xml di default avrò il gruppo di campi params vuoto

...
    <config>
        <fields name="params">

        </fields>
    </config>
...

funziona anche bene e mostra i parametri di default dal mio file XML.

Ora voglio offrire agli utenti un'opzione per sovrascrivere il parametro predefinito esistente semplicemente aggiungendolo all'interno di templateDetails.xml.

esempio predefinito protostar Ho cambiato il valore templateBackgroundColor da F4F6F7 a FF6600

<config>
    <fields name="params">
        <fieldset name="advanced">
        <field name="templateBackgroundColor" class="" type="color" default="#FF6600"
                label="TPL_PROTOSTAR_BACKGROUND_COLOR_LABEL"
                description="TPL_PROTOSTAR_BACKGROUND_COLOR_DESC" />
        </fieldset>
    </fields>
</config>

anche questo funziona, ma il campo è nella posizione sbagliata ora si trova come il primo campo in alto ed era il secondo.

Secondo il metodo loadFile () e load () dovrebbe sovrascrivere il campo nella sua posizione esatta.

https://github.com/joomla/joomla-cms/blob/staging/libraries/joomla/form/form.php#L851https://github.com/joomla/ Joomla cms/blob/staging/librerie/joomla/form/form.php # L727

Cosa mi sto perdendo qui? Il caricamento è stato avviato prima del modello xml?

Qualsiasi aiuto è apprezzato.

7
Dan

No, non sovrascrive il campo in posizione, ignora il nodo in posizione.

Nel tuo caso stai unendo nodo: fieldset-> nome: nodo avanzato: campo-> nome: templateBackgroundColor ...

nel nodo: fieldset-> nome: nodo avanzato: field-> nome: templateColor ... nodo: field-> nome: templateBackgroundColor ... ....

L'ordine del nodo del set di campi è: templateBackgroundColor L'ordine del nodo del set di campi originale è: templateColor, templateBackgroundColor

Sconcertante perché dalla formulazione dei documenti di Joomla, implica che sta unendo i campi "sul posto", ma sta unendo l'xml "sul posto"

Il modo migliore per mantenere l'ordine è aggiungere al tuo file

In alternativa, è possibile utilizzare molte API di livello inferiore per manipolare l'XML. Non lo consiglio perché l'API del modulo cambia di volta in volta per risolvere i problemi di funzionalità documentata rispetto a quella effettiva

2
garyamort