<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>イテルの一日一問 &#187; cakephp</title>
	<atom:link href="http://oneday.ter.jp/category/php/cakephp-php/feed" rel="self" type="application/rss+xml" />
	<link>http://oneday.ter.jp</link>
	<description>一日にひとつは何かを考える。</description>
	<lastBuildDate>Tue, 25 May 2010 00:35:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/category/php/cakephp-php/feed" />
		<item>
		<title>cakephpでフィールドを追加した際にデータの追加更新ができない・・・</title>
		<link>http://oneday.ter.jp/php/cakephp-php/983.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/983.html#comments</comments>
		<pubDate>Fri, 05 Feb 2010 04:02:38 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[フィールド]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[登録]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=983</guid>
		<description><![CDATA[
以前途中まで作っていたcakephpのシステム案件が急遽動き出し、
フィールドの修正など様々手直し中に発生し悶絶した点をメモります。
修正に従いフィールドを追加し、データを登録、修正しようとしたところ、
入力内容が全く [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://oneday.ter.jp/wp-content/uploads/2010/02/00_cake1.jpg" rel="shadowbox[post-983];player=img;"><img src="http://oneday.ter.jp/wp-content/uploads/2010/02/00_cake1-700x200.jpg" alt="cakephpでフィールドを追加した際にデータの追加更新ができない・・・" title="cakephpでフィールドを追加した際にデータの追加更新ができない・・・" width="700" height="200" class="alignnone size-thumbnail wp-image-985" /></a></p>
<p>以前途中まで作っていたcakephpのシステム案件が急遽動き出し、<br />
フィールドの修正など様々手直し中に発生し悶絶した点をメモります。</p>
<p>修正に従いフィールドを追加し、データを登録、修正しようとしたところ、<br />
入力内容が全く反映されず、解決策も見いだせないまま何日間か放置しましたが、<br />
そうも言ってられないので、着手するもまた悩むこと1日。</p>
<p>そこでグーグル先生に聞いたところ解決策がこんなにあっさり見つかるとは・・・。</p>
<p>参考：<a href="http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1111&amp;forum=6&amp;post_id=2239" target="_blank">フィールド追加（ユーザーフォーラム）</a></p>
<p>若干複雑怪奇なことをさせていたので自分のコードに間違いがあるに<br />
違いないと思っていたのですがそうではなかったようです。</p>
<p>「<strong>app/tmp/cache/models</strong>」中にモデルのキャッシュがあり、その中身を一度<br />
消去すれば良いとのこと。<br />
おそろしやキャッシュ。</p>
<p>また、この中の人がおっしゃられている通り、開発中は「<strong>/app/config/core.php</strong>」の<br />
「<strong>Configure::write(&#8216;Cache.disable&#8217;, true);</strong>」をコメントアウトもしくはfalseにしておけば<br />
良さそうですね。。。</p>
<p>まさかモデル（テーブルのフィールド）の設定までキャッシュされているとは・・・。<br />
もっとも、運用中にキャッシュが効いて早くなるのだったら文句は言えませんね。</p>
<p>公開の時はキャッシュを効かせるように修正するのを忘れずに。</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/983.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/983.html" />
	</item>
		<item>
		<title>cakephpのチェックボックスでハマった（カッコ悪いので全貌は明かさず）</title>
		<link>http://oneday.ter.jp/php/cakephp-php/949.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/949.html#comments</comments>
		<pubDate>Fri, 18 Dec 2009 08:49:37 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[チェックボックス]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=949</guid>
		<description><![CDATA[
cakephpのチェックボックスでちょっとはまったのでメモ。
そもそも、$form->inputでチェックボックスを作っていたのが良かったのか悪かったのか・・・。
まずわからなかったのがcheckedの状態にどうするの [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-950" title="cakephpのチェックボックスではまったけど力技で解決（カッコ悪いので全貌は明かさず）" src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake15.jpg" alt="00_cake" width="700" height="300" /></p>
<p>cakephpのチェックボックスでちょっとはまったのでメモ。<br />
そもそも、$form->inputでチェックボックスを作っていたのが良かったのか悪かったのか・・・。<br />
まずわからなかったのがcheckedの状態にどうするのか。</p>
<h3>$form->inputではcheckedではなくselectedだった、それだけ・・・</h3>
<p>結論から言うとselectedにすれば良かっただけでした。。。<br />
inputを使った場合はselect扱いなので「selected」ということ。</p>
<pre class="brush: php;">
$options=array('1'=&gt;'ごはん','2'=&gt;'おかず','3'=&gt;'味噌汁');
$selected=array('1','3');
$formBase= $form-&gt;input('hoge' ,array(
	'type'=&gt;'select' ,
	'div' =&gt; 'checkbox',
	'multiple' =&gt;'checkbox',
	'options' =&gt; $options,
	'selected' =&gt; $selected,
	'label' =&gt; false
	)
);
</pre>
<p>何悩んでるんだろ・・・私は。</p>
<h3>データの受け取りと確認画面</h3>
<p>これは恥ずかしいのでコードは晒しませんが、結局のところビューもしくはコントローラで<br />
ベタ打ちでコードを書いて対処しました。そもそも、チェックボックスに関しては配列でデータを<br />
受け渡しするので、確認画面を挟むと扱いが少し面倒になるります（そう思うのは私だけ？）。<br />
※ヘルパーで対処されている方もいらっしゃるようですのでそちらも参考にした方が良いかもしれません。</p>
<p>さらに、今回の案件では表示するフォームを管理ページで動的に設定＆生成するようにしていた<br />
あたりが混乱した原因の一つかもしれません。<br />
というのも、DBのフィールドはtextに設定しておいて、チェックボックスの値は登録時にカンマ区切りの<br />
テキストにして保存したり・・・頭が悪そうな処理ですが・・・。<br />
初心者の私にはちょっと早かったかもしれません。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/949.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/949.html" />
	</item>
		<item>
		<title>cakephpで登録直前のレコードのIDを取得する</title>
		<link>http://oneday.ter.jp/php/cakephp-php/942.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/942.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 10:53:01 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[直前のID]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=942</guid>
		<description><![CDATA[
フォームからデータを登録した直後に、関連するテーブルに
データを追加したいときなどに使えるタグのメモです。

if($this-&#62;モデル名-&#62;save($data)){
  $last_id = $this [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake14.jpg" alt="cakephpで登録直前のレコードのIDを取得する" title="00_cake" width="700" height="300" class="alignnone size-full wp-image-943" /></p>
<p>フォームからデータを登録した直後に、関連するテーブルに<br />
データを追加したいときなどに使えるタグのメモです。</p>
<pre class="brush: php;">
if($this-&gt;モデル名-&gt;save($data)){
  $last_id = $this-&gt;モデル名-&gt;getLastInsertID();
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/942.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/942.html" />
	</item>
		<item>
		<title>cakephpのAuthComponentを利用した際のパスワードの更新</title>
		<link>http://oneday.ter.jp/php/cakephp-php/925.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/925.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 10:44:19 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[AuthComponent]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=925</guid>
		<description><![CDATA[
ちょっと、というかかなり悩んだのでメモを残します。
AuthComponentは自動でログインやセッションなどを処理してくれるのですごく便利です。
しかし、登録されているログインパスワードを修正するときにつまずきました [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake12.jpg" alt="cakephpのauth機能を利用した確認画面を挟んだパスワードの登録" title="00_cake" width="700" height="300" class="alignnone size-full wp-image-935" /></p>
<p>ちょっと、というかかなり悩んだのでメモを残します。<br />
AuthComponentは自動でログインやセッションなどを処理してくれるのですごく便利です。<br />
しかし、登録されているログインパスワードを修正するときにつまずきました。。。</p>
<p>更新フォームで表示している「password」は既に暗号化されているので、<br />
パスワードの内容を修正しないで更新ボタンを押してしまうと、さらにそこに<br />
暗号化の処理がかかってしまい、もう、わけわかんなくなっちゃいます・・・orz</p>
<p>同様に躓いてらっしゃる方も多く、情報もたくさんあったのですが、<br />
私の理解できる方法で対処しました。<br />
結論から言うと「password」フィールドの他に「org_password」というフィールドを作って対処しました。<br />
フォームでは「org_password」を表示して入力させ、登録時には「org_password」には文字列を登録して<br />
「password」には暗号化した文字列を登録するといった方法です。</p>
<h3>設定したこと</h3>
<p>データベースに「password」の他に「org_password」というフィールドを追加し、モデルを設定しておきます。<br />
ビューには「org_password」フィールドのフォームを表示させます。</p>
<p>コントローラーの登録部分に「$this->Auth->password()」を使って暗号化をして<br />
「password」に登録する処理を記載します。</p>
<pre class="brush: php;">
//app/controller/users_controller.php
	//完了画面と処理
	function complete(){
		//チェックと送信
		if (!empty($this-&gt;data)) {
			//パスワードを暗号化
			$this-&gt;data['User']['password'] = $this-&gt;Auth-&gt;password($this-&gt;data['User']['org_password']);
			if ($this-&gt;User-&gt;save($this-&gt;data)) {
			}else{
				//エラー時の処理
			}
		}
	}
</pre>
<p>おそらくこの他にも更新の際は入力値が変わっていなければ暗号化しないなどの<br />
処理もあるかと思われますが、とりあえず私はこの方法で回避しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/925.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/925.html" />
	</item>
		<item>
		<title>cakephpでモデルでのバリデーション（重複登録回避など）</title>
		<link>http://oneday.ter.jp/php/cakephp-php/927.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/927.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 05:28:34 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[バリデーション]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=927</guid>
		<description><![CDATA[
ちょっと情報量がまだまだ不足しているのですが、モデルでのバリデーションの指定で
とりあえず使ったものだけを掲載しておきます。

VALID_NOT_EMPTY＝必須項目設定。
minLength＝最小の文字数の指定
m [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake11.jpg" alt="cakephpでモデルの設定方法（バリデーション、重複登録回避など）" title="00_cake" width="700" height="300" class="alignnone size-full wp-image-933" /></p>
<p>ちょっと情報量がまだまだ不足しているのですが、モデルでのバリデーションの指定で<br />
とりあえず使ったものだけを掲載しておきます。</p>
<ul>
<li>VALID_NOT_EMPTY＝必須項目設定。</li>
<li>minLength＝最小の文字数の指定</li>
<li>maxLength＝最大の文字数の指定</li>
<li>email＝メールアドレスかチェック</li>
<li>isUnique＝ユニークな値かチェックする</li>
</ul>
<pre class="brush: php;">
//app/models/user.phpの例
	var $validate = array(
		'username' =&gt; array(
				array(
				'rule' =&gt; VALID_NOT_EMPTY,
					'required' =&gt; true,
					'message' =&gt; 'ユーザー名は必須項目です'
				),
				array(
					'rule' =&gt; 'isUnique',
					'message' =&gt; 'このユーザー名は既に登録されています'
				),
		)
}
</pre>
<p>ユーザー名フィールドが必須項目に設定してなおかつユニークかチェックしています。<br />
ユニークチェックについては、更新のときにはユニークチェックを外してくれるみたいです。<br />
他にもたくさんのバリデーションのパターンが用意されているようです。<br />
便利だ、cake。</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/927.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/927.html" />
	</item>
		<item>
		<title>cakephpで複数のテーブル（モデル）を扱う</title>
		<link>http://oneday.ter.jp/php/cakephp-php/930.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/930.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 05:18:29 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[複数のモデル]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=930</guid>
		<description><![CDATA[
コントローラから複数のテーブルを扱うメモです。
いたって簡単で、下記の通りコントローラの冒頭で2つのテーブルを使う旨を宣言すればokです。

//app/controller/users_controller.php
 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake10.jpg" alt="cakephpで複数のテーブル（モデル）を扱う" title="00_cake" width="700" height="300" class="alignnone size-full wp-image-931" /></p>
<p>コントローラから複数のテーブルを扱うメモです。<br />
いたって簡単で、下記の通りコントローラの冒頭で2つのテーブルを使う旨を宣言すればokです。</p>
<pre class="brush: php;">
//app/controller/users_controller.php
var $uses = array('User','Group');
</pre>
<p>UserとGroupのモデルを使うと宣言したことになるそうです。<br />
使い方は以下の通りです。</p>
<pre class="brush: php;">
$user_data = $this-&gt;User-&gt;findAll();
$group_data  = $this-&gt;Group-&gt;findAll();
</pre>
<p>といった具合に使えるようです。<br />
・・・まだ試してないけど。</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/930.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/930.html" />
	</item>
		<item>
		<title>cakephpで日付と時間のセレクトボックスを表示する（年月日表示）</title>
		<link>http://oneday.ter.jp/php/cakephp-php/917.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/917.html#comments</comments>
		<pubDate>Sat, 05 Dec 2009 08:25:21 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[セレクトボックス]]></category>
		<category><![CDATA[日付]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=917</guid>
		<description><![CDATA[
いつもセレクトボックスと書くべきか、コンボボックスと書くべきか、プルダウンメニューと書くべきか
迷ってしまいますが、とりあえず今回はHTMLがベースですので、セレクトボックスと記載していきます。
早速本題から外れました [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake9.jpg" alt="cakephpで日付と時間のセレクトボックスを表示する（年月日表示）" title="00_cake" width="700" height="300" class="alignnone size-full wp-image-923" /></p>
<p>いつもセレクトボックスと書くべきか、コンボボックスと書くべきか、プルダウンメニューと書くべきか<br />
迷ってしまいますが、とりあえず今回はHTMLがベースですので、セレクトボックスと記載していきます。</p>
<p>早速本題から外れましたが、日付入力を間違いなく入力してもらうためには、htmlではやはり<br />
セレクトボックスを使うのがベストな気がします。<br />
バリデーションなどの機能を考えると「$form->dateTime」という標準の仕組みがよさそうなので<br />
利用してみます。</p>
<p>利用するコードは次の通りです。</p>
<pre class="brush: php;">
echo $form-&gt;dateTime('App.publication_date', 'YMD', '24', date('Y-m-d H:i'), option );
</pre>
<p>これで、日付と時間のセレクトボックスが表示されます。<br />
※optonの部分は適したものを設定します。</p>
<p>このままだと、見た目がかなりきついので例えばセパレータの指定を「/」にしてみる・・・<br />
でもジャップな私はどうも違和感があるため「年月日」で表示する方法を探していたところ<br />
いくつか発見しました。<br />
○参考：<a href="http://d.hatena.ne.jp/ele-yana/20090311/1236760830">Yanagi Notes</a>さん</p>
<p>コピペチックで申し訳ありませんが、メモのため転載させていただきます。</p>
<h3>ヘルパーを作成</h3>
<p>通常のフォームヘルパーのdateTimeはセパレータを変数として1つしか指定することができないので、<br />
それを配列で「年、月、日」を渡せるように改良する必要があります。</p>
<p>「cake/libs/view/helper/form.php/」を「app/view/helper/form.php」として保存し、<br />
「app/view/helper/form.php」の一部を下記のように修正します。</p>
<pre class="brush: php;">
//$opt = implode($separator, $selects);
$opt = &quot;&quot;;
$i = 0;
if (is_array($separator)) {
	foreach($selects as $select) {
		$opt .= $select.$separator[$i];
		$i++;
	}
} else {
$opt = implode($separator, $selects);
}
</pre>
<p>日付のセパレータを配列で渡すことができます。</p>
<h3>コントローラでの指定</h3>
<p>次に使用したいコントローラーに、フォームの設定を施します。<br />
もしくはビュー（ctpファイル）に直接書いてもいいのかもしれませんね。</p>
<pre class="brush: php;">
&lt;?php
//app/controller/posts_controller.php
class PostsController extends AppController {
	var $name = 'Posts';
	//前処理
	function index(){
		//公開日の日付設定など
		$attr = array(
			'minYear' =&gt; 2008,
			'maxYear' =&gt; date('Y')+1,
			'separator' =&gt; array('年', '月', '日　'),
			'monthNames' =&gt; false
		);
		$this-&gt;set('attr', $attr);
	}
}
?&gt;
</pre>
<p>「separator」以外は適当に自分の環境に合わせて修正してください。<br />
最後の行で「attr」という変数でビューに渡します。</p>
<h3>ビューで表示する</h3>
<pre class="brush: php;">
&lt;?php echo $form-&gt;dateTime('release', 'YMD', '24', date('Y-m-d H:i'), $attr ,false); ?&gt;
</pre>
<p>コントローラ内の「attr」からオプションデータを受け取り設定します。<br />
これで「0000年00月00日　00:00」という表記になります。</p>
<p>実は時、分まで対応したかったのですが、時間の都合上後回しにしました。<br />
さらに、日付と時間のスペースについてはセパレータの「日」の後ろに全角スペースを<br />
配置して「日　」という力技で対応しました・・・(^^;</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/917.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/917.html" />
	</item>
		<item>
		<title>cakephpで現在のコントローラー名を取得してctpファイルのbodyタグのIDに表示する</title>
		<link>http://oneday.ter.jp/php/cakephp-php/906.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/906.html#comments</comments>
		<pubDate>Sat, 05 Dec 2009 03:13:45 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[body]]></category>
		<category><![CDATA[ナビゲーション]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=906</guid>
		<description><![CDATA[
コントローラー名を取得するコードをメモします。
グローバルナビゲーションなどを現在のページに該当する部分を、
装飾したい場合などに使えるかと思います。

$this-&#62;name

ユーザー管理ページでグローバルナ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake8.jpg" alt="cakephpで現在のコントローラー名を取得してctpファイルのbodyタグのIDに表示する" title="00_cake" width="700" height="300" class="alignnone size-full wp-image-915" /></p>
<p>コントローラー名を取得するコードをメモします。<br />
グローバルナビゲーションなどを現在のページに該当する部分を、<br />
装飾したい場合などに使えるかと思います。</p>
<pre class="brush: php;">
$this-&gt;name
</pre>
<p>ユーザー管理ページでグローバルナビゲーションの「ユーザー管理」ボタンの<br />
画像をcssなどで装飾している場合の一例をご紹介します。</p>
<h3>一例</h3>
<p><strong>userコントローラー（/apps/controller/users_controller.php）</strong></p>
<pre class="brush: php;">
class UsersController extends AppController {
	var $name = 'Users';
	function beforeFilter(){
		//htmlのbodyのIDをコントローラ名で指定する
		$this-&gt;set('body_id', $this-&gt;name);
	}
}
</pre>
<p>コントローラーのbeforeFilterでコントローラー名をbody_idという変数にセットします。<br />
beforeFilterでなくてもいいのかもしれません。<br />
※というかcakeの使い方を完全に理解しているわけではないので、<br />
　間違ってるかもしれませんので、ご指摘くださると幸いです。</p>
<p><strong>共通のメインテンプレート（/app/view/layout/base.ctp）</strong></p>
<pre class="brush: php;">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt;&lt;?php echo $title_for_layout?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body id=&quot;&lt;?php echo $body_id; ?&gt;&quot;&gt;
</pre>
<p>bodyタグのidとして「$body_id」を指定しております。<br />
この場合は「id=&#8221;Users&#8221;」と表示されます。</p>
<p><strong>グローバルナビのcss（一部分）</strong></p>
<pre class="brush: css;">
#global_navigation ul{
	width:840px;
	margin:0;
	padding:0;
	list-style:none;
}
#global_navigation ul li{
	float:left;
	width:210px;
	height:90px;
}
#global_navigation ul li a{
	display:block;
	float:left;
	width:210px;
	height:90px;
	background-position:left top;
	background-repeat:no-repeat;
	text-indent:-9999px;
}
#global_navigation ul li#gnavi01 a{
	background-image:url(../images/gnavi01.png);
}
#Users #global_navigation ul li#gnavi01 a{
	background-position:left -180px;
}
#global_navigation ul li a:hover,
#Users #global_navigation ul li#gnavi01 a:hover{
	background-position:left -90px;
}
</pre>
<p>cssについては書き方はいろいろですのが、あくまで<br />
私の書き方の一例を掲載しております。</p>
<p>「li#gnavi01 a」の背景として210px×270pxの、通常時、ホバー時、ページイン時の<br />
画像を読み込ませて、heght90pxを指定して通常時の状態だけ表示します（下図のような感じ）。<br />
<img src="http://oneday.ter.jp/wp-content/uploads/2009/12/main_navi031.png" alt="ユーザー管理ボタンの一例" title="ユーザー管理ボタンの一例" width="210" height="270" class="alignnone size-full wp-image-913" /></p>
<p>ホバーした時に「background-position:left -90px;」を指定して90pxずらします。<br />
ページイン時に「background-position:left -180px;」を指定して180pxずらします。<br />
画像を1つにする理由はホバー時に一瞬ボタンが白くなるのを防ぐためです。</p>
<p>後半cssの説明になりましたが、要点は「$this->name」だけでしたｗ</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/906.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/906.html" />
	</item>
		<item>
		<title>cakephpで他のテーブルを参照したセレクトボックスを使う</title>
		<link>http://oneday.ter.jp/php/cakephp-php/895.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/895.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 05:23:44 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[セレクトボックス]]></category>
		<category><![CDATA[プルダウンメニュー]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=895</guid>
		<description><![CDATA[
どんだけ悩むんだよ！というくらい悩んでようやく解決策を見つけたのでメモをとります。
マニュアルをしっかり読めばかいてましたorz
さて、今回実行したいのは「ユーザー」の新規登録で「グループ」テーブルからセレクトボックス [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake5-700x200.jpg" alt="cakephpで他のテーブルを参照したセレクトボックスを使う" title="00_cake" width="700" height="200" class="alignnone size-thumbnail wp-image-896" /></p>
<p>どんだけ悩むんだよ！というくらい悩んでようやく解決策を見つけたのでメモをとります。<br />
マニュアルをしっかり読めばかいてましたorz</p>
<p>さて、今回実行したいのは「ユーザー」の新規登録で「グループ」テーブルからセレクトボックスを作るという処理。<br />
ちゃんと理解していないので、ささっと書いていきます。</p>
<h3>モデル</h3>
<pre class="brush: php;">
class User extends AppModel{
	var $name='User';
	var $belongsTo = array('Group' =&gt;
							array('className' =&gt; 'Group',
								  'foreignKey' =&gt; 'group_id'
								  ));
}
</pre>
<p>ここでのポイントは「belongsTo」を指定するところ。<br />
UserとGroupテーブルを関連付けています。<br />
また「foreignKey」ではUsersテーブルの「group_id」フィールドと<br />
Groupsテーブルの「id」を外部キーとして関連付けているところです。</p>
<h3>コントローラ</h3>
<pre class="brush: php;">
class PostsController extends AppController {
	var $name = 'Users';
	/*新規*/
	function index() {
		$this-&gt;set('groups', $this-&gt;User-&gt;Group-&gt;find('list'));
		$data = $this-&gt;User-&gt;Group-&gt;find('all');
		$list = Set::Combine($data, '{n}.Group.id', '{n}.Group.name');
		$this-&gt;set(compact('list'));
	}
}
</pre>
<p>実はここの意味が未だに分かっておりませんが一番はまったところでした。<br />
index()の最初の「$this->set(&#8216;groups&#8217;, $this->User->Group->find(&#8216;list&#8217;));」の<br />
一文が抜けていたためにエラーが出まくりでした。<br />
この一文はマニュアルに書いていたものをパクリましたが、モデルの「belongsTo」の<br />
指定だけで「Groups」を参照できないようですね。</p>
<h3>ビュー</h3>
<pre class="brush: php;">
 e($form-&gt;input('post.postscategorise_id', array('div' =&gt; 'false','label' =&gt; false , 'type' =&gt; 'select', 'options' =&gt; $list)));
</pre>
<p>ということでようやくセレクトを表示することができました・・・。</p>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/895.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/895.html" />
	</item>
		<item>
		<title>cakephpでテキストフィールドを扱う（＄form-&gt;input）</title>
		<link>http://oneday.ter.jp/php/cakephp-php/889.html</link>
		<comments>http://oneday.ter.jp/php/cakephp-php/889.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 01:02:07 +0000</pubDate>
		<dc:creator>イテル</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[オプション]]></category>
		<category><![CDATA[テキストフィールド]]></category>

		<guid isPermaLink="false">http://oneday.ter.jp/?p=889</guid>
		<description><![CDATA[input）&#8221; title=&#8221;00_cake&#8221; width=&#8221;700&#8243; height=&#8221;200&#8243; class=&#8221;alignn [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://oneday.ter.jp/wp-content/uploads/2009/12/00_cake4-700x200.jpg" alt="cakephpでテキストフィールドを扱う（＄form->input）&#8221; title=&#8221;00_cake&#8221; width=&#8221;700&#8243; height=&#8221;200&#8243; class=&#8221;alignnone size-thumbnail wp-image-890&#8243; /></p>
<p>今回はフォームの基本中の基本、テキストフィールドを表示する方法をメモってみます。<br />
cakephpではフォームを表示するにはフォームヘルパーという機能を使って表示します。<br />
単純に表示するだけではなく、入力された値をチェックしたりデータベースに格納したりする<br />
作業を簡単に実現してくれます。</p>
<p>テキストフィールドを表示するには次の通りです。</p>
<pre class="brush: php;">
&lt;?php
  echo $form-&gt;input('title', array('type'=&gt;'text'));
?&gt;
</pre>
<p>データベースのフィールド名を指定して「例：title」、<br />
表示する際のオプションを配列で指定して「array(&#8216;hoge&#8217;='value&#8217;)」いるようです。</p>
<p>このオプションにはいろいろあるようですが、以前掲載した「div」や「label」を消去したり、<br />
行数を指定してテキストエリアにしたりできます。</p>
<ul>
<li>サイズ変更＝&#8217;size&#8217; =>&#8217;value&#8217;</li>
<li>行数変更＝&#8217;rows&#8217; => &#8217;7&#8242;</li>
<li>divの非表示＝&#8217;div&#8217; => &#8216;false&#8217;</li>
<li>labelの非表示＝&#8217;label&#8217; => false</li>
<li>その他・・・</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://oneday.ter.jp/php/cakephp-php/889.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://oneday.ter.jp/php/cakephp-php/889.html" />
	</item>
	</channel>
</rss>
