web-dev-qa-db-ja.com

$ form-> loadFileメソッドを正しく設定する方法は?

私のシステムプラグインでは、テンプレートのデフォルトオプションの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の直前に起動しましたか?

どんな助けでもありがたいです。

7
Dan

いいえ、フィールドを上書きするのではなく、ノードを上書きします。

あなたのケースでは、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は時々変更されるため、お勧めしません

2
garyamort