Joomla!のViewで違う名前のModelを使う

まだまだJoomlaのコンポーネントを作成中。
JoomlaでMVCスタイルに沿ってコンポーネントを作る場合、各クラス・ファイル名をJoomla流儀の命名規則にしておかないと結構面倒。
■ViewでView名とは違う名前のModelを使いたい
admin側の機能を先に作ったんだけど、ユーザー側のコードでもadmin側で作ったmodelを使いたい。色々調べたり試行錯誤したりして、1時間くらいかかってしまった…
フォーラムのこの書き込みが結構役に立った。


■やりかた
・Controllerで使いたいModelをViewにセットする必要がある
以下、Controllerのコードの抜粋。

function foo() {
//admin側のmodelsディレクトリをmodelクラスの検索パスに追加
JModel::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'models');
// viewで使いたいmodelを取得
$model =& $this->getModel('Modelname', 'Prefix');
// viewを取得し、先ほどのmodelをセットする
$view =& $this->getView('foo', 'html');
// 第2引数を true にすると、このモデルがそのviewのデフォルトmodelになる
$view->setModel($model, true);
//この辺は普通通り。
JRequest::setVar('view', 'foo');
parent::display();
}

次にviewのコードの抜粋

function display($tpl = null) {
//Get the lessons available.
// 以下のようにmodelを取得可能
$model = $this->getModel('Modelname', 'Prefix');
$data = $model->getData();
//あるいは、以下のように。
$data = $this->get('Data');
}

■うまくいかない場合、こういう逃げ方もあるけど…
最悪、以下のようにviewの中でmodelを普通にインスタンス生成する汚いコードにしようかと思ったけど、何とか避けられて良かった。

require_once(JPATH_COMPONENT_ADMINISTRATOR.DS.’models’.DS.’modelname.php’); $model=new PrefixModelname(); $data = $model->getData();

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です