Wie richte ich die Methode $ form-> loadFile richtig ein?

7

In meinem System-Plugin verwende ich Folgendes, um die XML-Datei mit Standardoptionen für Vorlagen zu laden

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);
    }
}

funktioniert gut

Jetzt in templateDetails.xml standardmäßig habe ich die Gruppe der Parameterfelder leer

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

        </fields>
    </config>
...

funktioniert auch gut und zeigt die Standardparameter aus meiner XML-Datei an.

Jetzt möchte ich Benutzern die Option geben, den vorhandenen Standardparameter zu überschreiben, indem sie ihn einfach in die Datei templateDetails.xml einfügen.

Beispiel Protostar Standard Ich habe den Wert für templateBackgroundColor von F4F6F7 in FF6600 geändert

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

Dies funktioniert auch, aber das Feld befindet sich in der falschen Position, jetzt befindet es sich als erstes Feld oben und es war das zweite.

Gemäß der Methode loadFile () und load () sollte das Feld genau an seiner Stelle überschrieben werden.

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

Was fehlt mir hier? Wurde das Laden kurz vor der Vorlage xml ausgelöst?

Jede Hilfe wird geschätzt.

Dan
quelle
Ich werde eine Vermutung anstellen, vielleicht die Ladereihenfolge. Wenn der Protostar als zweites geladen wird, ersetzt er den 0-Index der Haupt-XML. Umkehren der Reihenfolge basierend auf dem, was überschreiben sollte, was helfen könnte. Obwohl ich Probleme habe, die Frage zu verstehen, gibt es eine Chance zur Klärung?
Jordan Ramstad
@JordanRamstad, anscheinend hat die Parameterreihenfolge hier etwas zu tun, was und wer angezeigt / überschrieben wird, $ form-> loadFile ('xmlfile', false, false, true); Also fragte ich, wie man es richtig einrichtet.
Dan

Antworten:

2

Nein, es überschreibt nicht das vorhandene Feld, sondern den vorhandenen Knoten.

In Ihrem Fall führen Sie Knoten zusammen: Feldsatz-> Name: Erweiterter Knoten: Feld-> Name: templateBackgroundColor ...

in Knoten: Feldset-> Name: Erweiterter Knoten: Feld-> Name: TemplateColor ... Knoten: Feld-> Name: TemplateBackgroundColor ... ....

Die Reihenfolge Ihres Fieldset-Knotens lautet: templateBackgroundColor Die Reihenfolge des ursprünglichen Fieldset-Knotens lautet: templateColor, templateBackgroundColor

Verwirrend, weil der Wortlaut der Joomla-Dokumente impliziert, dass die Felder "an Ort und Stelle" zusammengeführt werden, aber die XML-Datei "an Ort und Stelle" zusammengeführt wird.

Der beste Weg, um die Reihenfolge aufrechtzuerhalten, ist das Hinzufügen zu Ihrer Datei

Alternativ können Sie einen Großteil der Formular-API der unteren Ebene verwenden, um das XML zu bearbeiten. Ich empfehle dies nicht, da sich die Formular-API von Zeit zu Zeit ändert, um Probleme mit der dokumentierten Funktionalität im Vergleich zur tatsächlichen Funktionalität zu beheben

Garyamort
quelle