私のシステムプラグインでは、テンプレートのデフォルトオプションのXMLファイルをロードするために以下を使用しています
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);
}
}
正常に動作します
今ではデフォルトでtemplateDetails.xmlにあります私はparamsフィールドグループを空にします
...
<config>
<fields name="params">
</fields>
</config>
...
また、正常に動作し、xmlファイルのデフォルトのパラメータを表示します。
ここで、templateDetails.xml内に追加するだけで、既存のデフォルトパラメータを上書きするオプションをユーザーに提供したいと思います。
例protostarのデフォルトtemplateBackgroundColorの値を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>
これも機能しますが、フィールドは間違った位置にあり、最初のフィールドとして上に配置され、2番目になりました。
LoadFile()およびload()メソッドによると、フィールドをその正確な場所でオーバーライドする必要があります。
https://github.com/joomla/joomla-cms/blob/staging/libraries/joomla/form/form.php#L851https://github.com/joomla/ joomla-cms/blob/staging/libraries/joomla/form/form.php#L727
ここで何が欠けていますか?ロードはテンプレートxmlの直前に起動しましたか?
どんな助けでもありがたいです。
いいえ、フィールドを上書きするのではなく、ノードを上書きします。
あなたのケースでは、node:fieldset-> name:advanced node:field-> name:templateBackgroundColor ...をマージしています...
node:fieldset-> name:advanced node:field-> name:templateColor ... node:field-> name:templateBackgroundColor ... ...
フィールドセットノードの順序は、templateBackgroundColorです。元のフィールドセットノードの順序は、templateColor、templateBackgroundColorです。
Joomlaドキュメントの文言から、フィールドを「インプレース」でマージしているが、XMLを「インプレース」でマージしていることを意味するため、混乱します。
順序を維持する最良の方法は、ファイルに追加することです
または、XMLを操作するために、多くの下位レベルのフォームAPIを使用できます。文書化された機能と実際の機能の問題を修正するために、フォームAPIは時々変更されるため、お勧めしません