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


7

私のシステムプラグインでは、テンプレートのデフォルトオプション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#L851 https://github.com/joomla/joomla-cms/blob/staging/libraries/joomla /form/form.php#L727

ここで何が欠けていますか?ロードはテンプレートxmlの直前に起動しましたか?

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


おそらく、ロードの順序を推測します。protostarが2番目にロードされると、メインxmlの0インデックスが置き換えられます。そのため、役立つものをオーバーライドするものに基づいて順序を逆にします。質問を理解するのに問題がありますが、明確にする機会はありますか?
ジョーダンラムスタッド2014年

@JordanRamstad、どうやらここでのparamsの順序は、何を、誰が表示/上書きするかを実行する何かを持っています、$ form-> loadFile( 'xmlfile'、false、false、true); なので、適切に設定する方法を尋ねました。
Dan

回答:


2

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.