CakePHP Formヘルパの拡張 その2
3項目の電話番号入力フィールド
$form->textを拡張して3項目の電話番号入力フィールドを生成
前回に続いて、Formヘルパの拡張の第二弾です。
入力欄としてよくあるものとしては、電話番号や郵便番号を分割された入力フィールドで入力させるケースがあります。
入力フォームはモデル(テーブル)と連携するケースが多いですが、テーブルのカラムが1つなのに入力フォームは分割しなければならない場合などは、少々面倒なことを行う必要があります。
この煩わしさを回避する為に、カラムは1つでも入力欄は3つに自動的に分割されるようにに拡張する方法を検討しました。
結論から言えば、ヘルパだけの拡張では入力欄を分割するところまではできましたが、DBに格納する際に自動的に分割した値を結合することができませんでした。
(イマイチな)解決案として、AppModel内に処理を追加することでDB格納時の自動結合化を行っています。
動作はこちらから確認できます。
Read more
CakePHP Formヘルパの拡張 その1
日本語日付選択プルダウン
$form->datetimeを拡張して日本語の日付選択プルダウンを生成
CakePHP1.2のFormHelperには日付をプルダウンメニューで選択する機能があります。
生年月日の入力などに重宝しますが、日付の書式が英語なので日本の日付形式に変更する必要があります。
そこで、Formヘルパを拡張してExformヘルパクラスを生成し、独自メソッド内で日本語化対応を実施します。
動作はこちらから確認できます。
Read more
補足: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()を直前に記述すれば、次の処理は最後に文字列を渡すようにしています。
ですが、ちょっとイマイチなので、何か良い案はないでしょうか??
CakePHP Helper 一行置きに背景の色を変える
最近はCakePHPなどのフレームワークを使って開発することが多くなり、利用する機会が減ってしまいましたが、以前はSmartyをよく使っていました。
Smartyを使っていて便利だと思ったのがcycle関数です。
この関数はデータの一覧を表示する際などに下表のように一行置きにテーブル行の背景色を変更する場合などに重宝していました。
| 松井 秀喜 | ヤンキース |
| 井川 慶 | ヤンキース |
| イチロー | マリナーズ |
| 城島 健司 | マリナーズ |
| 福留 孝介 | カブス |
| 岩村 明憲 | レイズ |
| 松坂 大輔 | レッドソックス |
| 岡島 秀樹 | レッドソックス |
CakePHPで開発する際は、基本的にはテンプレートは素のPHPで記述しています。PHPでもちょっとしたIF文を記述すれば同様のことはすぐにできるのですが、、結構利用頻度が高そうなので簡単なCycleヘルパにしてみました。