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

| コメント(0) | トラックバック(0)

まだまだ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();

トラックバック(0)

トラックバックURL: http://www.kazu.tv/blog-mgr/mt-tb.cgi/898

コメントする

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このブログ記事について

このページは、kazuが2010年3月28日 13:59に書いたブログ記事です。

ひとつ前のブログ記事は「Joomlaでトランザクション」です。

次のブログ記事は「EclipseでBazaarを使う」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ