RSS
 

Archive for 7月, 2010

HABTMの注意事項

13 7月

CakePHP1.2でloadModelを使ってモデルを用意することがあるが、
その際予期していたクラスでなく、AppModelが入ってくることがある。

ひとつの原因として、綴りミスがある。
しかし綴りは合っているのにAppModelになってしまったり、
loadModelする場所によってAppModelになったりちゃんとしたクラスが呼び出されたりする。

この原因はHABTMにある場合がある。

たとえばposts, posts_tags, tagsというテーブルがあったとする。
この時、posts_controller.phpでは自動的にposts_tagsとtagsが初期化されるのだが、
この時連結であるposts_tagsがAppModelとして初期化されていた。
そのため、以後loadModelでPostsTagを呼びだすとAppModelとして返ってきてしまい、
PostsTagに宣言してあった関数などが呼び出せなくなったりしてしまう。
(すべての環境、バージョン等でそうかは知らない)

対処法としては、PostモデルのHABTM以外にhasManyとしてPostsTagを宣言しておけば良い。
ご注意を。

 
No Comments

Posted in CakePHP

 

携帯サイトその2

05 7月

以前、CakePHPでrender関数をオーバーライドして
自動的に携帯テンプレートを振り分ける方法を紹介した。
それにも関連するが、追加のプログラムを紹介。

	function _mb_render() {
		$this->layout = 'mobile';
		$output = $this->render();

		$contents = mb_convert_encoding($this->output, 'SJIS', 'UTF-8');
		echo $contents;
		exit;
	}

例えば上記は明示的に携帯サイトの出力を行ないたい場合などに便利。
最近のrender関数は返り値で出力内容を返してくれるようなので、
上記だけで全部済んでしまう。
mobileのlayoutのメタタグにはshift_jisと書いておく必要はあるが、
基本的に全部プログラムはテンプレートはutf-8で作ることが出来る。
(ただし、別途GETやPOSTの取得は手動でshift_jisからutf-8に変更したりは必要)

他にも、上記の方法を使ったりrender関数をオーバーライドしたりすることで、
携帯サイトだけでなくPC側のopensocial用のプログラムなどにも利用出来る。

{
    'html' : $output,
    'parameters' : $parameters,
}

みたいな感じのjsonを出力すれば
アプリケーション側では受け取ったhtmlをそのままinnerHTMLにいれるだけで
楽にアプリが作成可能。

 
No Comments

Posted in CakePHP