<?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>WIDGET-INFO &#187; CakePHP</title>
	<atom:link href="http://blog.widget-info.net/category/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.widget-info.net</link>
	<description>WIDGET-INFOではCakePHPやIPhone情報、その他開発に関する情報を発信</description>
	<lastBuildDate>Tue, 09 Feb 2010 13:44:47 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CakePHP find(&#8216;list&#8217;)について</title>
		<link>http://blog.widget-info.net/2010/01/cakephp-findlist/</link>
		<comments>http://blog.widget-info.net/2010/01/cakephp-findlist/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 14:16:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[List]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=409</guid>
		<description><![CDATA[CakePHPの「find('list')」について少し触れようと思います。殆どの方は「find('list')」をすでに使いこなしているかと思います。]]></description>
			<content:encoded><![CDATA[<p>CakePHPの「find(&#8216;list&#8217;)」について少し触れようと思います。</p>
<p>殆どの方は「find(&#8216;list&#8217;)」をすでに使いこなしているかと思います。<br />
さてこの機能の出力結果はよくプルダウンメニューやセレクトボックスで利用可能な<br />
配列の成型になっています。<br />
例）</p>
<pre class="brush:php">array(
’1’=&gt;'値1',
’2’=&gt;'値2'
)</pre>
<p>のような形です。<br />
キーにはプライマリーキーが設定されますが、「値」の部分はどこを参照されるのか。<br />
<span id="more-409"></span><br />
CakePHPの内部を見ると答えが出てきます。<br />
参照してしているテーブルから「title」「name」「プライマリーキー」の順に<br />
フィールドを探しにいきます。<br />
大変便利ではありますが、さて上記3つが存在しない場合（プライマリキーは別として）、<br />
もしくは独自に指定したい場合はどうするのか。。。</p>
<p>もちろんCakePHPは用意しています（笑<br />
答えは</p>
<pre class="brush:php">$this-&gt;モデル名-&gt;displayField = '指定したフィールド名';</pre>
<p>こうすることで、参照するフィールドを変更することができます。<br />
コントローラー内部で変更することが可能なので、途中で変更してデータを<br />
取得といった方法も可能です。</p>
<p>ちょっと子ネタでした（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2010/01/cakephp-findlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP 1.3.0-betaリリース</title>
		<link>http://blog.widget-info.net/2010/01/cakephp-1-3-0-beta/</link>
		<comments>http://blog.widget-info.net/2010/01/cakephp-1-3-0-beta/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 14:05:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Version]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[データベース]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=407</guid>
		<description><![CDATA[CakePHP 1.3.0-betaがリリースされています。「alpha」のリリースから2ヶ月ほどですが、だいぶ機能追加もあったようです。]]></description>
			<content:encoded><![CDATA[<p>CakePHP 1.3.0-betaがリリースされています。<br />
「alpha」のリリースから2ヶ月ほどですが、だいぶ機能追加もあったようです。</p>
<p>現在開発でも使っている「1.2.5」のバージョンでも十分開発が可能ですが<br />
「1.3」系はそれを上回るほど、個人的には期待しています（笑<br />
<span id="more-407"></span><br />
というのも「1.2」系では2つのアプリケーションをCakePHPの設計上1つにまとめることができず<br />
2つの「app」を用意しなければならない状態など、若干の不自由さがありました。<br />
もちろん何でも無理やり1つにすれば良いということはありませんが（笑</p>
<p>捉え方は個人差がありますが、個人的には今回の「1.3」系に早く乗り換えたいと考えています。</p>
<p>ちなみに個人的には以下の機能が「1.3」系で魅力的に見えています（笑</p>
<p>1.「virtual fields」機能<br />
ようやく来たか、という感じです（笑<br />
簡単に説明すると通常は1つテーブル内にあるフィールドはCakePHPで普通に取得すると<br />
存在するフィールドのみデータが取得されます。<br />
しかしデータベース（ここではMySQLで例えます）では、存在するフィールドAとBをくっつけてCの仮想のフィールドに<br />
加工してデータを取得することができます。<br />
今までのCakePHPでは独自にクエリーを記述して取得するしか方法はありませんでしたが、今回のCakePHPでは<br />
モデルに記述することでクエリーを書くことなく実現できるとのこと。<br />
さらにコーディング量が減るのではと期待しています。</p>
<p>2.「Routing.admin」の仕様変更<br />
今までの仕様では「Routing」の設定は1つまででした。<br />
いわゆる「Routing」が「admin」と設定していた場合は「index」と「admin_index」のみとなっています。<br />
さらに別名が必要な場合は「app」自体を分けるか、「Webサービス」機能を使うか（個人的にはまったく利用していません。。。）<br />
になるかと思います。<br />
しかし「1.3」系からは複数設定することが可能です。この変更はかなり大きいです（笑</p>
<p>3.Componentsの仕様変更<br />
といっても大幅な変更ではないようですが、使い勝手が向上した変更のようです。<br />
コンポーネントを作成したことがあるかたはご存知かと思いますが、現在のコンポーネントでは<br />
モデルのビヘイビアのように、初期設定値をコンポーネント設定時には記述することができません。<br />
しかし「1.3」系からは記述することが可能になります。<br />
これは個人的ちょっとほしかった機能で、コンポーネントの開発の幅が広くなりそうです（笑</p>
<p>と特に魅力的に思えた部分ですが、その他にも「Valdation」などなどで機能が大幅に改善されています。<br />
ここでは全てを書ききれないので、また別の機会に紹介できればと（汗</p>
<p>最後に、「1.2」系のアプリケーションに「1.3」系のCakePHPに変更すると、とりあえずエラーが起きます（笑<br />
まぁ当たり前な話ではありますが、特にクラス名が変更されている部分もあるそうなので、<br />
変更を予定されている方は注意が必要かと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2010/01/cakephp-1-3-0-beta/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP　携帯の開発</title>
		<link>http://blog.widget-info.net/2010/01/cakephp_on_mobile/</link>
		<comments>http://blog.widget-info.net/2010/01/cakephp_on_mobile/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 14:24:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[携帯]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=404</guid>
		<description><![CDATA[ここ最近は携帯業界の動きも激しくなってきました。GoogleのAndroidやIPhone、Windowsモバイルなどなどと。。。]]></description>
			<content:encoded><![CDATA[<p>ここ最近は携帯業界の動きも激しくなってきました。<br />
GoogleのAndroidやIPhone、Windowsモバイルなどなどと。。。</p>
<p>端末の種類は多いは世代違いがあるはで、携帯のWebコンテンツ開発は<br />
正直無駄にコストがかかるのが現状。<br />
実際仕事場でもデスマーチになりかけたときも（笑</p>
<p><span id="more-404"></span><br />
そしてCakePHPで携帯サイトの開発も多くなっているのも現実。<br />
ということで、かなり簡単&amp;大雑把に携帯ページを作成する方法です。</p>
<p>前提として簡易的な方法ですので、しっかりとしたコンテンツ開発の場合には<br />
恐らく向きません（笑<br />
特に絵文字対応など。。。</p>
<p>方法はこちら。</p>
<p>「app_controller.php」に以下のコードを記述します。</p>
<pre class="brush:php">function afterFilter(){
$this-&gt;output = mb_convert_kana($this-&gt;output, "raks", Configure::read('App.encoding'));
$this-&gt;output = mb_convert_encoding($this-&gt;output, "SJIS", Configure::read('App.encoding'));
}</pre>
<p>実際にページを確認すると、「UTF-8」の文字コードが「SJIS」に変換されます。<br />
単純なページを出力するだけなどの対応方法です。</p>
<p>まぁあくまでも、その場しのぎ的な方法の紹介でした（汗</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2010/01/cakephp_on_mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　事例1</title>
		<link>http://blog.widget-info.net/2010/01/cakephp_case1/</link>
		<comments>http://blog.widget-info.net/2010/01/cakephp_case1/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 14:10:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[事例]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=402</guid>
		<description><![CDATA[ということで少し事例を。。。だいぶCakePHPで開発しているサイトも多くなってきたかと思います。]]></description>
			<content:encoded><![CDATA[<p>ということで少し事例を。。。</p>
<p>だいぶCakePHPで開発しているサイトも多くなってきたかと思います。<br />
そこで自分が知ってるCakePHP製のサイトを紹介。</p>
<p><a title="ペット美容室・サロンのポータルサイト" href="http://www.petaru.info/" target="_blank">全国のペット美容室・サロンを検索できるポータルサイト</a><br />
ペット美容室またはサロンの情報を検索できるポータルです。</p>
<p>少しずつ紹介していきます（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2010/01/cakephp_case1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　「Thlangヘルパー」をリリース</title>
		<link>http://blog.widget-info.net/2010/01/cakephp_thlang_helper/</link>
		<comments>http://blog.widget-info.net/2010/01/cakephp_thlang_helper/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 15:03:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Helpers]]></category>
		<category><![CDATA[フォーマット]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=395</guid>
		<description><![CDATA[CakePHP用のヘルパーで個人的によく利用する日本式のフォーマットに変換するヘルパーです。
業務上でよく使う機能を使いまわしが。。。]]></description>
			<content:encoded><![CDATA[<p>CakePHP用のヘルパーで個人的によく利用する日本式のフォーマットに<br />
変換するヘルパーです。</p>
<p>業務上でよく使う機能を使いまわしが可能なように、作成したヘルパーになります。</p>
<p>くわしくはこちらへ</p>
<p><a title="Thlangヘルパー" href="http://blog.widget-info.net/thlang_helper/" target="_self"><span id="sample-permalink">http://blog.widget-info.net/<span id="editable-post-name" title="クリックしてパーマリンクのこの部分を編集">thlang_helper</span>/</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2010/01/cakephp_thlang_helper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　「Thcalendar」ヘルパーを公開</title>
		<link>http://blog.widget-info.net/2009/12/cakephp_thcalendar_open/</link>
		<comments>http://blog.widget-info.net/2009/12/cakephp_thcalendar_open/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 22:10:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Helpers]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[カレンダー]]></category>
		<category><![CDATA[祝日判定]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=385</guid>
		<description><![CDATA[CakePHP用に祝日判定機能など、拡張可能なカレンダーの表示サポートをするヘルパーを作成しました。]]></description>
			<content:encoded><![CDATA[<p>CakePHP用にカレンダーの表示サポートをするヘルパーを作成しました。</p>
<p>Thcalendarヘルパーでは当ブログでも表示されているようなカレンダー形式を自動表示します。<br />
祝日判定機能など、今までの開発をもとに拡張性をいくつかもたせています。</p>
<p>くわしくはこちらへ</p>
<p><a title="Thcalendarヘルパー" href="http://blog.widget-info.net/thcalendar_helper/" target="_self">http://blog.widget-info.net/thcalendar_helper/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/12/cakephp_thcalendar_open/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP プライマリキーIDについて</title>
		<link>http://blog.widget-info.net/2009/12/cakephp_uuid/</link>
		<comments>http://blog.widget-info.net/2009/12/cakephp_uuid/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 15:05:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[auto_increment]]></category>
		<category><![CDATA[UUIDs]]></category>
		<category><![CDATA[プライマリキー]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=373</guid>
		<description><![CDATA[CakePHPのデータベース設計をしているとプライマリキーである「ID」は基本自動で追加してく「auto_increment」で「int」系を利用するかと思います。]]></description>
			<content:encoded><![CDATA[<p>CakePHPのデータベース設計をしているとプライマリキーである「ID」は基本<br />
自動で追加してく「auto_increment」で「int」系を利用するかと思います。<br />
もちろんCakePHPの基本構造として問題はありません（笑</p>
<p>ただ、この設定ではIDが連番となりURLの構造としては予想がつきやすいかと思います。<br />
<span id="more-373"></span></p>
<p>そこでCakePHPではIDを「auto_increment」に頼らないIDを作成することができます。<br />
CaekPHPではIDを「int」で指定することが基本と説明しましたが、これを<br />
「CHAR(36)」または 「BINARY(36)」として指定すると「UUIDs」という方式で<br />
CakePHPはIDを生成します。</p>
<p>この方式は４つのハイフンで区切られ、32バイトの文字列の36文字から形成され<br />
ユニークなIDとなっています。</p>
<p>例）<br />
4b1a307c-cfe4-4343-9d06-1094c0a80b06</p>
<p>これで推測されないIDとして作成することが可能となります。<br />
ユーザー情報など、連番で予想されやすいテーブルに対してこの方式を適用すると<br />
URLから直接アクセスされたり、セキュリティを強固にすることが可能となります。</p>
<p>※個人情報などはURLから直接参照など基本はしませんが（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/12/cakephp_uuid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP パンくずリストについて</title>
		<link>http://blog.widget-info.net/2009/12/panlist/</link>
		<comments>http://blog.widget-info.net/2009/12/panlist/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 14:26:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[パンくず]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=369</guid>
		<description><![CDATA[さて、今回はCakePHPのパンくずリストについてです。パンくずリストはご存知の方は多いかと思います。ただプログラムを組むとなると、無駄に時間をかけたくはない]]></description>
			<content:encoded><![CDATA[<p>CakePHPのパンくずリストについて少し記載します。<br />
年末ということで若干の忙しさから、更新できずにありました。</p>
<p>さて、今回はCakePHPのパンくずリストについてです。<br />
パンくずリストはご存知の方は多いかと思います。<br />
ただプログラムを組むとなると、無駄に時間をかけたくはない<br />
小さな部分でもあるかと思います。<br />
<span id="more-369"></span><br />
例えば</p>
<pre class="brush:php">HOME &gt;&gt;カテゴリー一覧 &gt;&gt;　商品一覧</pre>
<p>のようなパンくずリストを出力したい場合<br />
普通なら直接記述したり、自前で関数を作ったりなどしますが、<br />
もちろんCakePHPには、その小さな部分も用意されています。</p>
<p>先ほどの例をもとにCakePHPでは次のようにすることで<br />
パンくずリストが出来上がってしまいます。</p>
<pre class="brush:php">//パンくずリストのリストへ追加
addCrumb('HOME', ’/’);
addCrumb('カテゴリー一覧', array('controller'=&gt;'categories','action'=&gt;'index'));
addCrumb('商品一覧', array('controller'=&gt;'products','action'=&gt;'index'));
//パンくずリストを出力
echo $html-&gt;getCrumbs();</pre>
<p>と記述することで先ほどの例の形で出力されます。<br />
「addCrumb()」の引数では次のようにCakePHPでは定義されています。</p>
<p>addCrumb($name, $link = null, $options = null)<br />
第1引数ではパンくずリストで表示する名前を指定します。<br />
第2引数では指定した名前をクリック時にリンク先を指定します。<br />
リンク先が指定されなかった場合、第1引数の名前が文字列で表示されます。<br />
リンクの指定方法は「$html-&gt;link()」の指定方法と同じになります。<br />
第3引数では、「$html-&gt;link()」の第3引数であるリンクタグのHTML属性の指定をします。</p>
<p>続いて「getCrumbs()」では次のように定義されています。</p>
<p>getCrumbs($separator = &#8216;&amp;raquo;&#8217;, $startText = false)<br />
「addCrunmb」で追加した情報を元にパンくずを生成します。<br />
第1引数ではパンくずの間に表示する文字を指定します。<br />
指定しない場合は「&gt;&gt;」となります。<br />
第2引数では始まりのリンクを自動で設定するかを指定します。<br />
例えば「カテゴリー」「一覧」と「addCrumb()」で追加していた場合、<br />
通常は<br />
「カテゴリー&gt;&gt;一覧」<br />
となりますが、「getCrumbs()」の第2引数を「HOME」とした場合<br />
「HOME&gt;&gt;カテゴリー&gt;&gt;一覧」となり、「HOME」にはルートディレクトリ（「/」へリンク）への<br />
リンクが自動で作成されます。</p>
<p>さて先ほどの例では「HOME」を普通に記述していました。<br />
「getCrumbs()」の第2引数があるのに、この説明では矛盾が生じてしまいます（笑</p>
<p>なぜ回りくどい説明をしてしまったかというと、「getCrumbs()」の第2引数を利用した場合は<br />
「HOME」という名前のみを設定することが可能でクラス名やHTML属性を付与することが<br />
できなくなってしまうのです。<br />
その場合は「addCrumb()」で最初に指定しておき、「getCrumbs()」の第2引数を「false」<br />
にすることで回避することが可能です。<br />
もちろんプログラマーにとったら楽な方を選びますが、結局SEOを行うといったプログラム以外の<br />
観点を思うと、個人的には回りくどくても工夫でなんとかします（笑</p>
<p>最後に登録されたパンくずリストを初期化する場合は次のように記載します。</p>
<pre class="brush:php">$html-&gt;_crumbs=array();
//なぜかリセット機能はCakePHPにありませんでした</pre>
<p>ちなみに以前利用した際のサンプルコードを記載しておきます。</p>
<p>例）</p>
<pre class="brush:php">//以下のような配列をViewへセットします。
$crumbList=array(
array(
'Category',
array('controller'=&gt;'categories','action'=&gt;'index'),
array()
),
array(
'Product',
array('controller'=&gt;'products','action'=&gt;'index'),
array()
)
);
//ここから先は「element」にしてしまうと楽になります。
if(!empty($crumbList)){
$html-&gt;_crumbs=array();
foreach($crumbList as $crumbs){
$html-&gt;addCrumb($crumbs[0],$crumbs[1],$crumbs[2]);
}
echo $html-&gt;getCrumbs(' &amp;raquo; ',false);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/12/panlist/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CakePHP Questions　質問サイト公開</title>
		<link>http://blog.widget-info.net/2009/11/cakephp-questions/</link>
		<comments>http://blog.widget-info.net/2009/11/cakephp-questions/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 15:28:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[質問]]></category>
		<category><![CDATA[迷惑メール]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=363</guid>
		<description><![CDATA[CakePHPの質問サイトが公開されたそうです。]]></description>
			<content:encoded><![CDATA[<p>CakePHPの質問サイトが公開されたそうです。<br />
まだ公開されたばかりなので質問数は少なめですが、言語を英語にすると<br />
英文の質問と回答も見ることもできるので、参考になるかと思います。</p>
<p><a title="CakePHP Questions" href="http://cakeqs.org/jpn" target="_blank">CakePHP Questions　http://cakeqs.org/jpn</a></p>
<p>ちなみに質問の投稿などは、会員登録が必要です。<br />
自分もGmailで登録しています。<br />
ちなみにGmailで登録すると迷惑メールにメールが受信される場合があります。<br />
※自分だけかもしれませんが。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/11/cakephp-questions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　Stringクラスのinsert()を使ってみる</title>
		<link>http://blog.widget-info.net/2009/11/cakephp_string_insert/</link>
		<comments>http://blog.widget-info.net/2009/11/cakephp_string_insert/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 15:06:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[その他クラス]]></category>
		<category><![CDATA[国際化]]></category>
		<category><![CDATA[言語]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=358</guid>
		<description><![CDATA[CakePHPのStringクラスにある「insert()」を試してみました。]]></description>
			<content:encoded><![CDATA[<p>CakePHPのStringクラスにある「insert()」を試してみました。<br />
自分のメモでもありますが。。。</p>
<p>特に便利と感じた利用方法。。。</p>
<p>皆さんは「__(&#8216;CakePHP best&#8217;)」などような言語ファイルを使った国際化を自動で行ってくれる機能を、をすでに使っているかと思います。<br />
例えばこの「CakePHP best」の部分を動的に変えたいと思う場合もあるかと思います。</p>
<p>簡単にコーディングを行おうと思えば次のようなるかと思います。<br />
<span id="more-358"></span></p>
<pre class="brush:php">$value='best';
echo __('CakePHP ',true).$value;</pre>
<p>と言った形で「$value」の値を変更していくと言った形でしょうか。。。<br />
もちろん100%悪い形というわけではありませんが、もし「CakePHP 」を最終的に<br />
「CakePHP is」+「$value」+「PHP」に変更しなければならなくなった場合。。。</p>
<p>もちろん先ほどの状態では次のように変更しなければならなくなります。</p>
<pre class="brush:php">$value='best';
echo __('CakePHP ',true).$value.__('PHP',true);</pre>
<p>これでは修正がある度に手間がかかり、これがいくつものファイルに存在した場合を考えると。。。<br />
悪夢です（笑）</p>
<p>そこで活躍するのが今回のStringクラスの「insert()」。</p>
<p>先ほどの例を「insert()」に置き変えた場合の答えを先に記述すると次のようになります。</p>
<pre class="brush:php">echo String::insert(__('CakePHP :status PHP',true),array('status'=&gt;'best'));
//CakePHP best PHP</pre>
<p>さてお気づきでしょうか？</p>
<p>「:status」が「insert()」の第2引数である配列のキーの値を参照し、置き換えてくれます。<br />
こうすることで、言語ファイルには「CakePHP :status PHP」だけを記述し、自由に変更することができます。<br />
もちろん配列のキーは複数指定することもできるので、</p>
<pre class="brush:php">echo String::insert(__('CakePHP :status PHP by :foo',true),array('status'=&gt;'best','foo'=&gt;'me'));
//CakePHP best PHP by me</pre>
<p>も可能です。<br />
これで無駄に言語ファイルが肥大化することも抑えることかと思います。<br />
英文の文法についてはご了承ください（笑）</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/11/cakephp_string_insert/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
