web-dev-qa-db-fra.com

Comment configurer correctement la méthode $ form-> loadFile?

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.

7
Dan

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.

2
garyamort