Dans mon plugin système, j'utilise ce qui suit pour charger le fichier XML d'options par défaut pour les modèles
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);
}
}
fonctionne bien
maintenant dans templateDetails.xml par défaut, le groupe de champs params sera vide
...
<config>
<fields name="params">
</fields>
</config>
...
fonctionne également très bien et il affiche les paramètres par défaut de mon fichier xml.
Maintenant, je veux donner aux utilisateurs une option pour remplacer le paramètre par défaut existant en l'ajoutant simplement à l'intérieur du fichier templateDetails.xml.
exemple protostar par défaut, j'ai changé la valeur templateBackgroundColor de F4F6F7 à 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>
cela fonctionne aussi, mais le champ est dans la mauvaise position maintenant, il est situé comme premier champ et il était deuxième.
Selon les méthodes loadFile () et load (), il convient de remplacer le champ à son emplacement exact.
https://github.com/joomla/joomla-cms/blob/staging/libraries/joomla/form/form.php#L851https://github.com/joomla/ joomla-cms/blob/staging/bibliothèques/joomla/form/form.php # L727
Qu'est-ce que j'oublie ici? Le chargement at-il été déclenché peu de temps avant le template XML?
Toute aide est appréciée.
Non, il ne remplace pas le champ en place, il remplace le nœud en place.
Dans votre cas, vous fusionnez un noeud: fieldset-> nom: noeud avancé: field-> nom: templateBackgroundColor ...
dans le noeud: fieldset-> nom: noeud avancé: field-> nom: templateColor ... noeud: field-> name: templateBackgroundColor ... ....
L'ordre du noeud de votre jeu de champs est le suivant: templateBackgroundColor L'ordre du noeud du jeu de champs d'origine est: templateColor, templateBackgroundColor
Déroutant parce que d'après la formulation de la documentation Joomla, cela implique qu'il fusionne les champs "en place", mais qu'il fusionne le xml "en place".
Le meilleur moyen de maintenir les commandes est d’ajouter à votre dossier
Sinon, vous pouvez utiliser une grande partie de la forme de niveau inférieur api pour manipuler le XML. Je ne le recommande pas, car l'API de formulaire change de temps en temps pour résoudre les problèmes de fonctionnalité documentée par rapport à la fonctionnalité réelle.