質問: コアコンポーネントモデルフォームxmlのオーバーライド 記事のリンクのフィールドタイプを、入力テキストから内部メニュー項目のあるドロップダウンリストに変更します。最小限の作業でこれを行うための便利な方法を探しています。xmlを別の場所に配置して単純なオーバーライドを作成する方法がある場合、どこにも見つかりません。とにかくこれは可能ですか?そうでなければ、何が最善のアプローチでしょうか?
回答: より標準的なアプローチは、xmlが処理された後、モデルを離れて変更を加える前に、プラグインを使用してjformオブジェクトをキャッチすることでしょう。その関数の例は次のようになります:function oncontentprepareform($form, $data) { if (!($form instanceof jform)) { $this->_subject->seterror('jerror_not_a_form'); return false; } // check we are manipulating a valid form. $name = $form->getname(); if (!in_array($name, array('com_content.article'))) { return true; } $form->loadfile('__path_alternate_xml_file__'); return true; } loadfileにはデフォルトで$resetフラグはtrueに設定されているため、同じ名前のフィールドがある場合、それらを新しいバージョンで置き換える必要があります。これは正規表現のように機能しないため、新しい部分だけでなく、フィールド全体を定義する必要があります。ただし、更新の影響を受けない場所(プラグインフォルダーなど)に個別のファイルを保持するのは簡単です。また、明らかでない場合は、これをcontentプラグインにすることをお勧めします。