サイトコントローラーから管理者エンドモデルにアクセスする必要があります。これを行う最良の方法は何ですか?私はsiteコントローラに以下を持っています:
$this->addModelPath(JPATH_COMPONENT_ADMINISTRATOR.'/models');
...
$view = &$this->getView('MyView', 'html');
$view->setModel($this->getModel('MyAdminModel'));
...
$view->display();
次に:
$model = $this->getModel('MyAdminModel');
$this->data = $model->get('Items');
私の見解では、これは少し入り組んでいるようです。もっと簡単な方法はありますか?
そうではない、あなたはそれを正しくやっている。
管理者テーブルモデルをロードする必要がある場合もあります(レガシー?、J2.5または3を使用していますか?)。これは、ビューだけでなく、コンポーネントの外部にあるモデルが必要な場合に発生します。この場合、JPATH_COMPONENT_ADMINISTRATOR
定数。コンポーネントの外部からのモデルの使用を防止します。そして、レガシークラスが移動されたときの問題を防ぐために、フレームワークでレガシークラスをロードしていることを確認してください(J 3.3でファイルシステムの場所を変更しただけです)。
別のアプローチ-おそらくより良く簡単な-は、管理モデルからフロントエンドモデルを継承し、ビューをよりシンプルにすることです。これは、JModelAdmin
がJModelForm
を拡張するため機能します。フロントエンドモデルはほとんど空になり、フロントエンドに関連するコードをそこにオフセットして、アーキテクチャをより良い状態に保つ機会が得られます。
管理側とサイト側の両方に存在するクラスの管理バージョンを使用しようとすると、問題が発生する場合があります。この場合、それを行うことはフロントエンドでのクラスの再宣言と見なされ、許可されません。
例は、Joomla 3.4.5のContentModelArticleです。