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