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.
Antworten:
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
quelle