<?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/"
	>

<channel>
	<title>STUDIO KINGDOM &#187; CakePHP</title>
	<atom:link href="http://www.studio-kingdom.com/category/cakephp/feed" rel="self" type="application/rss+xml" />
	<link>http://www.studio-kingdom.com</link>
	<description>PHP、javaScriptによるプログラミングやAdobeソフトによるWEBデザインなどなど</description>
	<lastBuildDate>Tue, 29 Nov 2011 14:01:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>アプリひとまず完成（CakePHP修行 #14）</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_training/184</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_training/184#comments</comments>
		<pubDate>Mon, 27 Oct 2008 13:12:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP修行]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/?p=184</guid>
		<description><![CDATA[完成といってもまだまだ機能不足で課題も多いですが・・・。 http://clubss.studio-kingdom.com/ (メール：guest@studio-kingdom.com、パスワード：guest でログイン [...]]]></description>
			<content:encoded><![CDATA[				<p>完成といってもまだまだ機能不足で課題も多いですが・・・。</p>
				<p><a href="http://clubss.studio-kingdom.com/" target="_blank">http://clubss.studio-kingdom.com/<br />
				</a>(メール：guest@studio-kingdom.com、パスワード：guest でログインすることができます。)</p>
				<p>改めてこのWEBアプリの趣旨を確認し、今後実装したい機能を挙げてみました。</p>
				<h3>WEBアプリの趣旨</h3>
				<p>友達やサークルなどの仲間内で利用してもらう。<br />
				このアプリを利用することで、イベントを<span style="color: #ff0000;">「気軽」</span>に企画することが出来るようになるのが狙い。モンスターハンターなどのネットワークゲームでも利用されることを期待している。</p>
				<h3>今後実装したい機能</h3>
				<p>・携帯電話対応<br />
				・グループ機能<br />
				・アンケート機能</p>
				<p>下記の画像は実際にWebサーバで動いているものをキャプチャーしたものです。<br />
				上から順に「トップ、カレンダー、飲み会等のイベント参加、メンバー一覧、設定」となっています。</p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubsstop11.png"><img style="display: inline" title="clubss-top" src="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubsstop11-thumb.png" alt="clubss-top" width="128" height="104" /></a></p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubsscal.png"><img style="display: inline" title="clubss-cal" src="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubsscal-thumb.png" alt="clubss-cal" width="128" height="104" /></a></p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubssevent.png"><img style="display: inline" title="clubss-event" src="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubssevent-thumb.png" alt="clubss-event" width="128" height="104" /></a></p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubssmem4.png"><img style="display: inline" title="clubss-mem" src="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubssmem4-thumb.png" alt="clubss-mem" width="128" height="75" /></a></p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubssset1.png"><img style="display: inline" title="clubss-set" src="http://www.studio-kingdom.com/wp-content/uploads/2008/11/clubssset1-thumb.png" alt="clubss-set" width="128" height="81" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_training/184/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>開発中アプリの大まかなイメージを作成（CakePHP修行 #13）</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_training/81</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_training/81#comments</comments>
		<pubDate>Thu, 18 Sep 2008 12:15:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP修行]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/cakephp_training/136</guid>
		<description><![CDATA[Fireworks使って　↓　のようにデザインしてみました。 次はHTMLとCSSに取り掛かって、要件ももっと詰めていかないと。]]></description>
			<content:encoded><![CDATA[				<p>Fireworks使って　↓　のようにデザインしてみました。<br />
				次はHTMLとCSSに取り掛かって、要件ももっと詰めていかないと。</p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/04/clbs_top.png" title="clbs_top.png"><img src="http://www.studio-kingdom.com/wp-content/uploads/2008/04/clbs_top.thumbnail.png" alt="clbs_top.png" /></a></p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/04/clbs_cal.png" title="clbs_cal.png"><img src="http://www.studio-kingdom.com/wp-content/uploads/2008/04/clbs_cal.thumbnail.png" alt="clbs_cal.png" /></a></p>
				<p><a href="http://www.studio-kingdom.com/wp-content/uploads/2008/04/clbs_ref.png" title="clbs_ref.png"><img src="http://www.studio-kingdom.com/wp-content/uploads/2008/04/clbs_ref.thumbnail.png" alt="clbs_ref.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_training/81/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>開発の心得（CakePHP修行 #12）</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_training/80</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_training/80#comments</comments>
		<pubDate>Tue, 16 Sep 2008 17:12:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP修行]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/cakephp_training/135</guid>
		<description><![CDATA[こちらのエントリーを参考に開発の心得というやつを作ってみた。 新サービスを開発するときに気をつけてること 1.コンセプト = メタファーを決める 「飲み会企画クラブ」みたいな感じかなぁ。 飲み会以外にも、クラブ・サークル [...]]]></description>
			<content:encoded><![CDATA[				<p>こちらのエントリーを参考に開発の心得というやつを作ってみた。<br />
				<a href="http://blog.myrss.jp/archives/2008/02/post_130.html" target="_blank">新サービスを開発するときに気をつけてること</a></p>
				<blockquote><p> 1.コンセプト = メタファーを決める</p></blockquote>
				<p>「飲み会企画クラブ」みたいな感じかなぁ。<br />
				飲み会以外にも、クラブ・サークル活動なんかのイベントも含む。</p>
				<p>登録ユーザーがTwitter風な発言コーナーで<br />
				A:「たまには飲みにいかない？」<br />
				B:「いいねー、企画して！」<br />
				A:「じゃ、週末に。」<br />
				A:「飲み会登録しました。参加する人は参加登録しといて。」<br />
				C:「参戦します。参加登録しときました。」<br />
				のような流れで使われることを期待しています。<br />
				ちなみにネットサービスではなく、CMSチックなものを目指しています。<br />
				「CakePHPセットアップしてから、このソース突っ込んでください」みたいな。</p>
				<blockquote><p>2.サービス名を決める</p></blockquote>
				<p>Club + Class で Clubssとしてるけど、何かイマイチ・・・。</p>
				<blockquote><p>3.アイデア ⇒ 開発 ⇒ 仕上げ の苦しみ度合いを理解しておく</p></blockquote>
				<p>理解してないですね。<br />
				萎えないような工夫として、やはり人を巻き込むことでしょうか。<br />
				CakePHPのフォーラムに「こんなもの作ってます！」と宣言してみるか。</p>
				<blockquote><p> 4.時間をかけて悩んだものはアウト</p></blockquote>
				<p>本当にその通りだと思います。<br />
				これまでの経験から、何度か煮詰まったら一旦全部まっさらにして最初からやり直した方が早いことが多いです。</p>
				<blockquote><p>5.デザインから入る</p></blockquote>
				<p>教えに従うことにしました。FireWorksで作成中。</p>
				<blockquote><p>6.デザインを懲りすぎない</p></blockquote>
				<p>これも同意。<br />
				良質なアイコン素材と背景のグラデーションでごまかして乗り切る予定。</p>
				<blockquote><p>7.デザインのポイントは余白</p></blockquote>
				<p>「プロのデザイナーは余白をデザインする」という話を聞いたことがあります。<br />
				逆に素人は余白を埋めたがるそうな。</p>
				<blockquote><p>8.LEGO ブロックみたいなパーツから作り始める</p></blockquote>
				<p>もう少し詳しく知りたい！<br />
				汎用的なクラスや関数のこと？<br />
				ヘッダーやフッター、メニューなんかの共通パーツのこと？<br />
				それとも、全部のことかな。</p>
				<blockquote><p> 9.LEGO ブロックを一気に組み立てる</p></blockquote>
				<p>この作業は楽しそうですね。モチベーションが無いとなぁ。</p>
				<blockquote><p>10.仕上げはリリース日の設定から</p></blockquote>
				<p>完全プライベートでやっているので、仕事との兼ね合いがあって決めるのが非常に難しい。<br />
				10月いっぱいの完成を目指して進めたいところ。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_training/80/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>途中経過（CakePHP修行 #11）</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_training/78</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_training/78#comments</comments>
		<pubDate>Mon, 08 Sep 2008 13:09:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP修行]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/cakephp_training/129</guid>
		<description><![CDATA[久々の更新です。ネタがありませんが・・・。 継続するって難しい…。 1週間に2,3つのクオリティの高いエントリーを投稿し続けるαブロガーってやっぱ凄いですね。]]></description>
			<content:encoded><![CDATA[				<p>久々の更新です。ネタがありませんが・・・。</p>
				<p><img src="http://www.studio-kingdom.com/wp-content/uploads/2008/04/2008-04-08_214531.png" alt="2008-04-08_214531.png" /></p>
				<p>継続するって難しい…。<br />
				1週間に2,3つのクオリティの高いエントリーを投稿し続けるαブロガーってやっぱ凄いですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_training/78/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>basics.php &#8211; stripslashes_deep($value) (CakePHP解析 #10)</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_analysis/138</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_analysis/138#comments</comments>
		<pubDate>Thu, 21 Aug 2008 13:54:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP解析]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/?p=138</guid>
		<description><![CDATA[今回はdispatcher.phpで呼び出されているstripslashes_deep関数を解析します。 この関数はPHPのmagic_quotes_gpcがonの場合でも問題なく動作させるために使用されています。 [s [...]]]></description>
			<content:encoded><![CDATA[				<p>今回はdispatcher.phpで呼び出されているstripslashes_deep関数を解析します。</p>
				<p>この関数はPHPのmagic_quotes_gpcがonの場合でも問題なく動作させるために使用されています。</p>
				<p>[sourcecode language='php']<br />
				if (ini_get(&#8216;magic_quotes_gpc&#8217;) == 1) {<br />
				    if (!empty($_POST)) {<br />
				        $params['form'] = stripslashes_deep($_POST);<br />
				    }<br />
				} else {<br />
				    $params['form'] = $_POST;<br />
				}<br />
				[/sourcecode]</p>
				<p>ここで、magic_quotes_gpcがonの場合に、裏でどんな処理が行われるのかをおさらいしておきます。<br />
				マニュアルによると</p>
				<blockquote><p>
				オンの場合、全ての&#8217; (シングルクオート), &#8221; (ダブルクオート), \ (バックスラッシュ)および<br />
				NULL 文字がバックスラッシュで自動的にエスケープされます。 これは、addslashes() の機能と同じです。
				</p></blockquote>
				<p>つまり、「Is your name O&#8217;reilly?」は、「Is your name O\&#8217;reilly?」に自動的に変換されるわけです。<br />
				この変換処理はHTTPリクエストデータ(GET, POST, そして COOKIE)に対して行われます。</p>
				<p>そして、この変換されてしまったデータを元に戻すために使用されるのがstripslashes_deep()関数です。<br />
				この関数は「cake/basics.php」内に定義されています。</p>
				<p>[sourcecode language='php']<br />
				function stripslashes_deep($value) {<br />
				    if (is_array($value)) {<br />
				        $return = array_map(&#8216;stripslashes_deep&#8217;, $value);<br />
				        return $return;<br />
				    } else {<br />
				        $return = stripslashes($value);<br />
				        return $return ;<br />
				    }<br />
				}<br />
				[/sourcecode]</p>
				<p>引数が配列で無い場合と、配列の場合で処理が分かれています。</p>
				<p>まずは配列で無い場合ですが、stripslashes関数で変換した値を返して終了しています。<br />
				stripslashes関数はmagic_quotes_gpcが行う変換処理の反対の変換を、つまり<br />
				「Is your name O\&#8217;reilly?」であれば、「Is your name O&#8217;reilly?」に変換します。</p>
				<p>次は配列の場合の処理を見てみます。</p>
				<p>まずarray_mapですが、これは第一引数で指定されている関数を、第二引数の配列の各値を引数にして呼び出す関数です。<br />
				ここでポイントになるのはarray_map内でstripslashes_deep関数を、つまり自分自身を関数内で呼び出している点です。<br />
				これは再帰関数と呼ばれるものになりますが、初めはなぜ「stripslashes」でなく「stripslashes_deep」を呼び出す必要があるのか疑問でした。<br />
				ただし、よくよく考えてみると配列の中身も配列、更にその中身も配列の可能性が…と考えると「なるほど再帰関数ってこういう<br />
				使い方をするのか」と感心してしまいました。</p>
				<p>この関数を作った人が関数名に「_deep」と付けたのもうなづけます。<br />
				再帰関数を理解するのにうってつけのお手本ではないでしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_analysis/138/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DB日付値を任意のフォーマットで取得するコンポーネント（CakePHP修行 #10）</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_training/77</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_training/77#comments</comments>
		<pubDate>Wed, 13 Aug 2008 12:30:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP修行]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/cakephp_training/127</guid>
		<description><![CDATA[カレンダー・スケジュールに関するアプリを作っている関係上、どうしても日付に関する処理が多くなってしまいます。 DBに保存した日付値を任意のフォーマットに変換してくれるコンポーネントやヘルパーがデフォルトで用意されていない [...]]]></description>
			<content:encoded><![CDATA[				<p>カレンダー・スケジュールに関するアプリを作っている関係上、どうしても日付に関する処理が多くなってしまいます。<br />
				DBに保存した日付値を任意のフォーマットに変換してくれるコンポーネントやヘルパーがデフォルトで用意されていないか探してみたのですが見つからない…。<br />
				多分、Timeヘルパーあたりにあると思うのですが、ヘルパーだとController内で使用することが出来ないので「DatetimeComponent」なるコンポーネントを自作してみました。</p>
				<p>componentsフォルダにdatetime.phpファイルを作成し、下記のソースをコピペ。</p>
				<p><strong>・app/controllers/components/datetime.php</strong><br />
				[sourcecode language='php']<br />
				<?php<br />
				class DatetimeComponent extends Object<br />
				{<br />
					var $controller = null;</p>
				<p>	function __construct(){<br />
						parent::__construct();<br />
					}</p>
				<p>	function startup(&amp;amp;$controller){<br />
						$this->controller =&amp;amp; $controller;<br />
					}</p>
				<p>	function toFormat($elem, $format){<br />
						//2008-02-27 00:00:00<br />
						$set_year = substr($elem, 0, 4);    //年<br />
						$set_month = substr($elem, 5, 2);    //月<br />
						$set_day = substr($elem, 8, 2);        //日<br />
						$set_hour = substr($elem, 11, 2);    //時<br />
						$set_minute = substr($elem, 14, 2);    //分<br />
						$set_second = substr($elem, 17, 2);    //秒</p>
				<p>		return date($format, mktime($set_hour, $set_minute, $set_second, $set_month, $set_day, $set_year));<br />
					}<br />
				}<br />
				?><br />
				[/sourcecode]</p>
				<p>フォーマットの指定はPHPの標準関数であるDate関数と同じ形式です。<br />
				↓こんな感じで使用します。<br />
				[sourcecode language='php']<br />
				$yyyy_m_d = $this->Datetime->toFormat($this->data['Schedule']['start'],&#8217;Y/n/j&#8217;);<br />
				[/sourcecode]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_training/77/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dispatcher.php &#8211; $this-&gt;parseParams($url) (CakePHP解析 #9)</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_analysis/136</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_analysis/136#comments</comments>
		<pubDate>Mon, 11 Aug 2008 13:51:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP解析]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/?p=136</guid>
		<description><![CDATA[今回は$Route-&#62;parseから戻ってparseParamsメソッドの解析をします。 以前解析したように$Route-&#62;parse(&#8216;users/login/aaaa/bbbb/cccc/dd [...]]]></description>
			<content:encoded><![CDATA[				<p>今回は$Route-&gt;parseから戻ってparseParamsメソッドの解析をします。</p>
				<p>以前解析したように$Route-&gt;parse(&#8216;users/login/aaaa/bbbb/cccc/dddd?a=A&amp;b=B&#8217;)の戻り値は<br />
				下記のような配列になります。</p>
				<pre>
Array
(
	[pass] =&gt; Array
	(
		[0] =&gt; aaaa
		[1] =&gt; bbbb
		[2] =&gt; cccc
		[3] =&gt; dddd
	)
	[controller] =&gt; users
	[action] =&gt; login
)
</pre>
				<p>この結果を$params変数が受け取っているわけですが、この$params変数は「$this-&gt;data」を保持する非常に重要な変数です。<br />
				下記のようにその後の処理でform値やurl値を取り込んでいます。</p>
				<p>[sourcecode language='php']<br />
				if (ini_get(&#8216;magic_quotes_gpc&#8217;) == 1) {<br />
					if (!empty($_POST)) {<br />
						$params['form'] = stripslashes_deep($_POST);<br />
					}<br />
				} else {<br />
					$params['form'] = $_POST;<br />
				}<br />
				[/sourcecode]</p>
				<p>次回はこの処理の中で使用されている「stripslashes_deep」関数を解析します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_analysis/136/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>登録したスケジュールをカレンダーに表示（CakePHP修行 #9）</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_training/76</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_training/76#comments</comments>
		<pubDate>Sun, 27 Jul 2008 11:19:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP修行]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/cakephp_training/126</guid>
		<description><![CDATA[今回はカレンダーページ上に、登録したスケジュールのタイトルを表示する処理を実装します。 コントローラーのCalendarアクションを変更します。 ・app/controllers/schedules_controller [...]]]></description>
			<content:encoded><![CDATA[				<p>今回はカレンダーページ上に、登録したスケジュールのタイトルを表示する処理を実装します。</p>
				<p>コントローラーのCalendarアクションを変更します。<br />
				<strong>・app/controllers/schedules_controller.php</strong><br />
				[sourcecode language='php']<br />
				//calendar<br />
				function calendar($year = null, $month = null){<br />
					//システムメッセージをセット<br />
					$this->set(&#8216;sys_msg&#8217;, $this->Session->read(&#8216;sys_msg&#8217;));<br />
					$this->Session->delete(&#8216;sys_msg&#8217;);</p>
				<p>	//指定された年月を取得／指定なしの場合はシステム日付を取得<br />
					if($year == null || $month == null){<br />
						$Month = new Calendar_Month_Weekdays( date(&#8216;Y&#8217;), date(&#8216;m&#8217;), 0 );<br />
						$year = date(&#8216;Y&#8217;);<br />
						$month = date(&#8216;m&#8217;);<br />
					} else {<br />
						$Month = new Calendar_Month_Weekdays( $year, $month, 0 );<br />
					}<br />
					//PEARよりカレンダー情報を読み込み<br />
					$Month->build();<br />
					$this->set(&#8216;month&#8217;, $Month);<br />
					//取得した年月、次月、前月をYYYY/MM形式で変数にセット<br />
					$this->set(&#8216;next_year_month&#8217;, date(&#8220;Y/m&#8221;, mktime(0, 0, 0, $month+1, 1, $year)));<br />
					$this->set(&#8216;this_year_month&#8217;, date(&#8220;Y/m&#8221;, mktime(0, 0, 0, $month, 1, $year)));<br />
					$this->set(&#8216;prev_year_month&#8217;, date(&#8220;Y/m&#8221;, mktime(0, 0, 0, $month-1, 1, $year)));</p>
				<p>	//取得した年月のスケジュール情報をScheduleから取得<br />
					$cond = array(<br />
						&#8216;AND&#8217; => array(<br />
						array(&#8220;Schedule.start&#8221; => &#8220;>=$year-$month-01&#8243;)<br />
						,array(&#8220;Schedule.start&#8221; => &#8220;< =$year-$month-31")<br />
						)<br />
					);<br />
					$this->set(&#8216;schedules&#8217;, $this->Schedule->findAll($cond));<br />
				}<br />
				[/sourcecode]<br />
				<span id="more-76"></span></p>
				<p>ビューのCalendarページの日付セルにスケジュールタイトルを表示するように処理を付け加えます。<br />
				<strong>・app/views/schedules/calendar.thtml</strong><br />
				[sourcecode language='php']</p>
				<h1>Calendar</h1>
				<p>< ?php<br />
				echo $html->link(&#8216;< <', '/schedules/calendar/' . $prev_year_month);<br />
				echo $this_year_month;<br />
				echo $html->link(&#8216;>>&#8217;, &#8216;/schedules/calendar/&#8217; . $next_year_month);<br />
				?></p>
				<p><!-- ▼sys_msg --><br />
				< ?php if(isset($sys_msg)){ ?></p>
				<div id="sys_msg">< ?php echo($sys_msg); ?></div>
				<p><script type="text/javascript"><!--
				$(document).ready(function() { $("#sys_msg").fadeOut(2500); });
				// --></script><br />
				< ?php } ?><br />
				<!-- ▲sys_msg --></p>
				<p><!-- ▼calendar --></p>
				<div id="calendar">
				<table border="0">
				<tbody>
				<tr>
				<th>Sun</th>
				<th>Mon</th>
				<th>Tue</th>
				<th>Wed</th>
				<th>Thu</th>
				<th>Fri</th>
				<th>Sat</th>
				</tr>
				<p>< ?php<br />
				while ($Day = $month->fetch()) {<br />
				if ($Day->isFirst()) {<br />
				echo &#8221;</p>
				<tr>\n&#8221;;<br />
				}<br />
				if ($Day->isEmpty()) {<br />
				echo &#8221;</p>
				<td></td>
				<p>\n&#8221;;<br />
				} else {<br />
				echo &#8221;</p>
				<td>&#8221; . $Day->thisDay();<br />
				//add link<br />
				echo $html->link($html->image(&#8220;pencil_add.png&#8221; , array(&#8220;class&#8221;=>&#8221;alphafilter&#8221;)), &#8216;/schedules/add/&#8217; . $month->year . &#8220;/&#8221; . $month->month . &#8220;/&#8221; . $Day->thisDay(),null,null,false);<br />
				echo &#8220;\n&#8221;;<br />
				//schedulesテーブルに登録されているタイトルを表示<br />
				echo &#8221;</p>
				<ul>\n&#8221;;<br />
				foreach ($schedules as $schedule):<br />
				if(date(&#8220;Ymd&#8221;, strtotime($schedule['Schedule']['start'])) == date(&#8220;Ymd&#8221;, mktime(0, 0, 0, $month->month, $Day->thisDay(), $month->year))){<br />
				echo &#8221;</p>
				<li>&#8220;;<br />
				echo $html->link($schedule['Schedule']['title'], &#8216;/schedules/edit/&#8217;.$schedule['Schedule']['id']);<br />
				echo &#8220;</li>
				<p>\n&#8221;;<br />
				}<br />
				endforeach;<br />
				echo &#8220;</ul>
				<p>\n&#8221;;<br />
				echo &#8220;</td>
				<p>\n&#8221;;<br />
				}<br />
				if ($Day->isLast()) {<br />
				echo &#8220;</tr>
				<p>\n&#8221;;<br />
				}<br />
				}<br />
				?></tbody>
				</table>
				</div>
				<p><!-- ▲calendar --><br />
				[/sourcecode]</p>
				<p>カレンダー上に表示するタイトルのスタイルを指定<br />
				<strong>・app/webroot/css/cake.generic.css</strong><br />
				[sourcecode language='css']<br />
				#calendar ul{<br />
					margin: 0;<br />
					padding: 0;<br />
					list-style-image:none;<br />
					list-style-position:outside;<br />
					list-style-type:none;<br />
				}</p>
				<p>#calendar li{<br />
					margin:0;<br />
					padding:3px 0px 1px 18px;<br />
					background-image:url(/img/arr.png);<br />
					background-repeat:no-repeat;<br />
					line-height:120%;<br />
					margin-bottom:0px;<br />
				}<br />
				[/sourcecode]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_training/76/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>スケジュール登録処理を作成（CakePHP修行 #8）</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_training/74</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_training/74#comments</comments>
		<pubDate>Fri, 18 Jul 2008 13:08:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP修行]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/cakephp_training/122</guid>
		<description><![CDATA[今回はスケジュール登録画面を作成します。 今回は(1)スケジュール登録ページのリンク→(2)登録ページ→(3)登録処理→(4)登録完了メッセージの表示、と 順を追って説明していきます。 ちなみに完成画像はこちら↓ (1) [...]]]></description>
			<content:encoded><![CDATA[				<p>今回はスケジュール登録画面を作成します。<br />
				今回は(1)スケジュール登録ページのリンク→(2)登録ページ→(3)登録処理→(4)登録完了メッセージの表示、と<br />
				順を追って説明していきます。</p>
				<p>ちなみに完成画像はこちら↓</p>
				<p><a href='http://www.studio-kingdom.com/wp-content/uploads/2008/02/calendar_add.gif' title='calendar_add.gif'><img src='http://www.studio-kingdom.com/wp-content/uploads/2008/02/calendar_add.thumbnail.gif' alt='calendar_add.gif' /></a></p>
				<p><a href='http://www.studio-kingdom.com/wp-content/uploads/2008/02/schedule_add.gif' title='schedule_add.gif'><img src='http://www.studio-kingdom.com/wp-content/uploads/2008/02/schedule_add.thumbnail.gif' alt='schedule_add.gif' /></a></p>
				<p><strong>(1)スケジュール登録ページのリンク</strong><br />
				<b>・app/view/schelue/calendar.thtml</b><br />
				※前回まで、app/view/schelue/index.thtmlだったファイルをcalendar.thtmlに変更しました。</p>
				<p>まずは、カレンダーページの日付セル内にそれぞれ日付登録ページへのリンクを張ります。<br />
				ここでリンク画像に<a href="http://www.famfamfam.com/lab/icons/" target="_blank">famfamfam</a>さんの画像を使用します。<br />
				画像形式がPNGなので、IE6対策を施しておきます。<br />
				IE6のPNG画像透過処理を行ってくれる<a href="http://blog.webcreativepark.net/2007/02/01-233315.html" target="_blank">to-Rさんが作成された便利なjsライブラリ</a>があるので、<br />
				それを利用させていただきます。ダウンロードしたjsファイルをapp/webroot/jsフォルダに入れてください。</p>
				<p>リンクをこんな風に記述。<br />
				[sourcecode language='php']<br />
				echo $html->link($html->image(&#8220;pencil_add.png&#8221; , array(&#8220;class&#8221;=>&#8221;alphafilter&#8221;)), &#8216;/schedules/add/&#8217; . $month->year . &#8220;/&#8221; . $month->month . &#8220;/&#8221; . $Day->thisDay(),null,null,false);<br />
				[/sourcecode]</p>
				<p>また、ダウンロードしたjsファイルを読み込むために、レイアウトのデフォルトファイルにjsファイル読み込みの記述を追加します。<br />
				後述するjqueryファイルも同じように追記します。<br />
				<b>・app/views/layouts/default.thtml</b><br />
				[sourcecode language='php']<br />
				<head><br />
				<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></p>
				<link rel="stylesheet" href="/css/cake.generic.css" type="text/css">
				<p><script type="text/javascript" src="/js/alphafilter.js"></script><br />
				<script type="text/javascript" src="/js/jquery.js"></script>
				</link></head><br />
				[/sourcecode]</p>
				<p><span id="more-74"></span></p>
				<p><strong>(2)登録ページ</strong><br />
				<b>・app/view/schedule/add.thtml</b></p>
				<p>app/view/schedlue配下にadd.thtmlを作成します。<br />
				このファイルはCakePHPの典型的な、登録フォームのページにします。</p>
				<p>[sourcecode language='php']</p>
				<h1> &#8211; Schedule Add &#8211; </h1>
				<div id="content">
				<h2>< ?php echo($year . "/" . $month . "/" . $day) ?></h2>
				<p>< ?php echo($html->link(&#8220;Back&#8221;, &#8216;/schedules/calendar/&#8217; . $year .&#8217;/&#8217; . $month)) ?></p>
				<form method="post" action="<?php echo $html->url(&#8216;/schedules/add/&#8217; . $year . &#8220;/&#8221; . $month)?>&#8221;><br />
				    < ?php echo $html->hidden(&#8216;Schedule/start_year&#8217;, array(&#8220;value&#8221; => $year)) ?><br />
				    < ?php echo $html->hidden(&#8216;Schedule/start_month&#8217;, array(&#8220;value&#8221; => $month)) ?><br />
				    < ?php echo $html->hidden(&#8216;Schedule/start_day&#8217;, array(&#8220;value&#8221; => $day)) ?></p>
				<p>
				        Title：<br />
				        < ?php echo $html->input(&#8216;Schedule/title&#8217;, array(&#8216;size&#8217; => &#8217;40&#8242;))?><br />
				        < ?php echo $html->tagErrorMsg(&#8216;Schedule/title&#8217;, &#8216;タイトルは必ず入力してください。&#8217;) ?>
				    </p>
				<p>
				        Content：<br />
				        < ?php echo $html->textarea(&#8216;Schedule/content&#8217;, array(&#8216;rows&#8217;=>&#8217;10&#8242;)) ?><br />
				        < ?php echo $html->tagErrorMsg(&#8216;Schedule/content&#8217;, &#8216;本文は必ず入力してください。&#8217;) ?>
				    </p>
				<p>
				        < ?php echo $html->submit(&#8216;Save&#8217;) ?>
				    </p>
				</form>
				</div>
				<p>[/sourcecode]</p>
				<p><strong>(3)登録処理</strong><br />
				<b>・app/controllers/schedules_controller.php</b></p>
				<p>登録処理もCakePHPの典型的な登録処理です。<br />
				登録完了メッセージをセッションに入れているのは<a href="http://www.ideaxidea.com/archives/cakephp/" target="_blank">百式さんの手法</a>をパクらせていただきました。</p>
				<p>[sourcecode language='php']<br />
				//add<br />
				function add($year = null, $month = null, $day = null)<br />
				{<br />
					$this->set(&#8220;year&#8221;,$year);<br />
					$this->set(&#8220;month&#8221;,$month);<br />
					$this->set(&#8220;day&#8221;,$day);</p>
				<p>	if(!empty($this->data))<br />
					{<br />
						//日付をセット<br />
						$this->data['Schedule']['start'] =<br />
							$this->data['Schedule']['start_year'] . &#8220;-&#8221; .<br />
							$this->data['Schedule']['start_month'] . &#8220;-&#8221; .<br />
							$this->data['Schedule']['start_day'];</p>
				<p>		//データ保存<br />
						if($this->Schedule->save($this->data))<br />
						{<br />
							$this->Session->write(&#8216;sys_msg&#8217;, &#8216;Your schedule has been saved.&#8217;);<br />
							$this->redirect(&#8216;/schedules/calendar/&#8217; . $year . &#8220;/&#8221; . $month);<br />
						}<br />
					}<br />
				}<br />
				[/sourcecode]</p>
				<p><strong>(4)登録完了メッセージの表示</strong><br />
				<b>・app/view/schelue/calendar.thtml</b></p>
				<p>登録完了メッセージをjqeryを使用して、ふわーんと表示させています。これも<a href="http://www.ideaxidea.com/archives/cakephp/" target="_blank">百式さんの手法</a>をパクらせていただきました。</p>
				<p>[sourcecode language='php']<br />
				<!-- ▼sys_msg --><br />
				< ?php if(isset($sys_msg)){ ?></p>
				<div id="sys_msg">< ?php echo($sys_msg); ?></div>
				<p><script>
				$(document).ready(function() { $("#sys_msg").fadeOut(2500); });
				</script><br />
				< ?php } ?><br />
				<!-- ▲sys_msg --><br />
				[/sourcecode]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_training/74/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dispatcher.php &#8211; $Route-&gt;parse【その弐】 (CakePHP解析 #8)</title>
		<link>http://www.studio-kingdom.com/cakephp/cakephp_analysis/134</link>
		<comments>http://www.studio-kingdom.com/cakephp/cakephp_analysis/134#comments</comments>
		<pubDate>Tue, 15 Jul 2008 13:48:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP解析]]></category>

		<guid isPermaLink="false">http://www.studio-kingdom.com/?p=134</guid>
		<description><![CDATA[今回は $Route->parseを更に解析する予定でしたが、正直何をしたいのかがいまいち分からない。どうやら$Routeオブジェクトの$routes配列にいろいろ突っ込んでいるようです。 一体どんな値を入れているのかだ [...]]]></description>
			<content:encoded><![CDATA[				<p>今回は $Route->parseを更に解析する予定でしたが、正直何をしたいのかがいまいち分からない。どうやら$Routeオブジェクトの$routes配列にいろいろ突っ込んでいるようです。</p>
				<p>一体どんな値を入れているのかだけ、出力して終了(>_<)<br />
				CakePHPのよく理解している人なら見当がつくのかな。</p>
				<pre>
Router Object
(
 [routes] => Array
  (
   [0] => Array
    (
     [0] => /
     [1] => /^[\/]*$/
     [2] => Array
      (
      )

     [3] => Array
      (
       [controller] => schedules
       [action] => index
      )
    )

   [1] => Array
    (
     [0] => /pages/*
     [1] => #^/pages(?:\/(.*))?[\/]*$#
     [2] => Array
      (
      )
     [3] => Array
      (
       [controller] => pages
       [action] => display
      )
    )

   [2] => Array
    (
     [0] => /tests
     [1] => #^/tests[\/]*$#
     [2] => Array
      (
      )
     [3] => Array
      (
       [controller] => tests
       [action] => index
      )
    )

   [3] => Array
    (
     [0] => /bare/:controller/:action/*
     [1] => #^/bare(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/(.*))?[\/]*$#
     [2] => Array
      (
       [0] => controller
       [1] => action
      )
     [3] => Array
      (
       [bare] => 1
      )
    )

   [4] => Array
    (
     [0] => /ajax/:controller/:action/*
     [1] => #^/ajax(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/(.*))?[\/]*$#
     [2] => Array
      (
       [0] => controller
       [1] => action
      )
     [3] => Array
      (
       [bare] => 1
      )
    )

   [5] => Array
    (
     [0] => /:controller/:action/* (default)
     [1] => /^(?:\/(?:([a-zA-Z0-9_\-\.\;\:]+)(?:\/([a-zA-Z0-9_\-\.\;\:]+)(?:[\/\?](.*))?)?))[\/]*$/
     [2] => Array
      (
       [0] => controller
       [1] => action
      )
     [3] => Array
      (
      )
    )
  )

 [__admin] =>
 [_log] =>
)
</pre>
				<p>追記<br />
				$route配列をよくよく観察してみると、CakePHPの遷移処理を管理しているように見えますね。<br />
				下記の例だと</p>
				<pre>
[0] => /
[1] => /^[\/]*$/
[2] => Array
    (
    )
[3] => Array
    (
        [controller] => schedules
        [action] => index
    )
</pre>
				<p>おそらく[0]がルートパスを表していて、[1]が遷移に関する正規表現？、[2]はひとまず置いといて<br />
				[3]は実行するコントローラーとアクション。</p>
				<p>[1]の正規表現は何を意味しているんだろう？<br />
				「/^[\/]*$/」にマッチするのって「/」とか「///」みたいに、ひたすらスラッシュの文字列だけのように思うんだけど。<br />
				もう少しCakePHP理解しないと、分からないかな。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.studio-kingdom.com/cakephp/cakephp_analysis/134/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

