web-dev-qa-db-ja.com

Joomlaコンポーネントの.xmlファイルをオーバーライドするにはどうすればよいですか?

/ components/com_users/modelsの一部のファイル(.phpおよび.xml)を上書きしたい。これは可能ですか?または、変更して名前を変更したcom_usersのコピーを作成してみますか?

私がやろうとしていることは、ユーザープロファイルと登録フォームからnameフィールドを削除し、それをfirstnamelastnameに置き換えます。 registration.phpprofile.phpも変更して、$firstname . ' ' . $lastnameの-​​nameを組み合わせて修正する必要があります。Joomla nameに依存して、意味のあるものに設定されます。

これは実際にそれぞれのファイルを直接編集する場合は機能しますが、Joomlaへのアップグレードで変更が失われます。 これを回避するにはどうすればよいですか?

1
Joe Völker

Joomlaプラグインとイベントを確認してください。

onContentPrepareForm($form, $data)onContentPrepareData($context, $data)を使用する必要があるかもしれませんが、最初のイベントで問題ないはずです)のようなイベントがあります_$data_および_$form_を使用して、次のように独自のXMLでフォームを変更します。

_    /** @var JForm $form */
    $form->loadFile(dirname(__FILE__).'/custom/form.xml',true);
_

必要なものを上書きします。

そして、深く掘り下げると、onUserBeforeSave($user, $isnew, $data)のようなユーザーストアアルゴリズムでいくつかのトリガーを見つけることができ、リクエストからデータを取得して現在のデータを調整できます。

しかし、userを使用しないで作業する場合は、次のようなonAfterRouteのようなシステムイベントを使用するだけで解決策になる可能性があります。

_JFactory::getApplication()->input->set('name',JFactory::getApplication()->input->get('firstname').' '.JFactory::getApplication()->input->get('lastname'));
_
2
Alexandr