CakePHP Formヘルパの拡張 その1
日本語日付選択プルダウン
$form->datetimeを拡張して日本語の日付選択プルダウンを生成
CakePHP1.2のFormHelperには日付をプルダウンメニューで選択する機能があります。
生年月日の入力などに重宝しますが、日付の書式が英語なので日本の日付形式に変更する必要があります。
そこで、Formヘルパを拡張してExformヘルパクラスを生成し、独自メソッド内で日本語化対応を実施します。
動作はこちらから確認できます。
Read more
CakePHP HABTMモデルの検索
HABTMで関連付けされたテーブルを検索条件に加えたい場合、一回のfindメソッドで取得しようとすると、joinの設定やグループ化で面倒な実装が必要になってきます。
データ量にもよりますが、
1)関連テーブルを先に検索し、ID配列を取得
2)ID配列を検索条件に追加
としたほうが簡単に実装できるケースが多そうです。
Read more
CakePHP コントローラーのアクションをコンポーネントにまとめる
本業のほうが忙しく久々の更新になってしまいましたが小ネタです。
Cakeを使っていると最初はbakeやscaffoldを利用する機会がありますが、序々に利用頻度が減ってきました。(現在では殆ど使っていません)
理由としては、社内での共通のルールであったり、プロジェクト毎の特性を反映した雛型から複製して作成したほうが効率的になってきたということが大きいと思います。
ただ、bakeでの自動生成や複製方式だと初回は良いのですが、大規模なものになってくると、同様のソースが点在し一括での改修などが面倒なことになってきます。
ということで、明らかに同様の処理はscaffold風にコンポーネント化することにしました。
※コンポーネントからコントローラーを制御する場合は、ロジックが分散すると見通しが悪くなりますので、ロジック全体を委譲できる場合に利用することをお勧めします。
Read more
CakePHP zip圧縮コンポーネント
CodeIgniterの標準ライブラリにはZip圧縮クラスがあり、簡単に以下のような機能を実装することができます。
・Zipアーカイブを作成し、サーバーに保存やダウンロードを行う
・サーバーのファイルやディレクトリをZipに追加
・動的にテキストデータをZipに追加
このクラスをCakePHPのコンポーネントクラスとして利用できるように少々改良しました。
Read more
CakePHP1.2 Behaviorでモデルのメソッドキャッシュを行う
CakePHP1.2から新たにBehavior(振る舞い)クラスが実装され、モデルに共通の処理を定義することが可能になりました。
今回はBehaviorを使ってモデルの各メソッドの結果を自動的にキャッシュするクラス(CacheBehavior)を検討してみました。
CakePHPでは標準でビューキャッシュをサポートしていますが、Cacheクラスを利用することで簡単にキャッシュ機能を組み込むことができます。
Webサービスを利用したAJAX郵便番号検索
郵便番号から住所を検索したり、住所から郵便番号を検索するTipsは様々なサイトで公開されています。
大体の場合は、郵便事業株式会社様(旧日本郵政公社)が提供しているCSVデータをDBに保持して・・という形式が多いようです。
確かに自前でDBを用意して検索アプリを作成し、郵便番号情報を常に最新にメンテナンスできる環境があれば、最善の方法です。
ただ、「そこまでは必要ないけども、もっと簡単に実装したい」という場合を想定して、WEBサービスを利用し簡単に実装するサンプルを作成しました。
今回のサンプルはこちらで確認できます。
よくある住所欄の入力フォームで
・郵便番号を入力するとオートコンプリート形式で該当住所を表示
・住所をクリックすると入力フォーム内の住所欄に値を代入する
というものです。
複数選択型のプルダウン
単一選択のプルダウンを複数選択型に変更する為のTipsです。
複数選択型と言っても従来のselectタグではなく、チェックボックスを
使ったプルダウン表示に変更させる方式です。
(prototype.jsを利用しています)
言葉だけではイメージし難いと思いますので、サンプルを参照してください。
上側に従来のプルダウン、下側に同じ要素の複数選択型プルダウンが表示されています。
js 一覧表示のチェックボックス関連の制御をまとめたクラス
prototype.jsやjQueryの出現でajaxに限らずJavaScriptでのプログラミングが随分に楽になりました。
今回は検索結果一覧などテーブル内の複数行などに、データ選択用のチェックボックスがつけられているケースで、よく使う制御を簡単に実装できるようにまとめたクラスをprototype.jsをベースに作成してみました。
CakePHP Tips:ドラッグ&ドロップでデータを並び替える
マスターのメンテナンス機能やCMS系の機能を開発する際に、データの並びをユーザーが自由に設定できるようにしたいという要件はよくあります。
CakePHPとprototype.jsを使えば、ドラッグ&ドロップでデータの並びを設定することが簡単に実装できます。
今回のサンプルはこちらで確認できます。
id, name(果物名), position(position) の3カラムのfuruitsテーブルのデータを並び替えています。
補足:PHP5限定 CakePHPのView内の関数処理を綺麗に記述する
TechSiteのほうに
PHP5限定 CakePHPのView内の関数処理を綺麗に記述する
の記事を投稿しましたが、少し補足します。
想定としては、PHPの標準の文字列関数などを使うことを想定していますが、->のメソッドチェーン形式で単純に処理を繋げられるケースは処理を行う文字列が第1引数にくる場合だけです。
【対象の関数例】
substr、trim、mb_convert_kana、など。
ですが、PHPの標準関数は対象文字列が常に第1引数になっている訳ではありません。
str_replace(’変換対象文字列’, '変換文字列', $string)
のように対象が最後にくるケースもあります。
この場合でも、一応、、
-
fx($string)->p()->str_replace('AAA', 'BBB')->e();
といった感じにp()を直前に記述すれば、次の処理は最後に文字列を渡すようにしています。
ですが、ちょっとイマイチなので、何か良い案はないでしょうか??