cakephpで日付と時間のセレクトボックスを表示する(年月日表示)

イテル on 12 5, 2009

cakephpで日付と時間のセレクトボックスを表示する(年月日表示)

いつもセレクトボックスと書くべきか、コンボボックスと書くべきか、プルダウンメニューと書くべきか
迷ってしまいますが、とりあえず今回はHTMLがベースですので、セレクトボックスと記載していきます。

早速本題から外れましたが、日付入力を間違いなく入力してもらうためには、htmlではやはり
セレクトボックスを使うのがベストな気がします。
バリデーションなどの機能を考えると「$form->dateTime」という標準の仕組みがよさそうなので
利用してみます。

利用するコードは次の通りです。

echo $form->dateTime('App.publication_date', 'YMD', '24', date('Y-m-d H:i'), option );

これで、日付と時間のセレクトボックスが表示されます。
※optonの部分は適したものを設定します。

このままだと、見た目がかなりきついので例えばセパレータの指定を「/」にしてみる・・・
でもジャップな私はどうも違和感があるため「年月日」で表示する方法を探していたところ
いくつか発見しました。
○参考:Yanagi Notesさん

コピペチックで申し訳ありませんが、メモのため転載させていただきます。

ヘルパーを作成

通常のフォームヘルパーのdateTimeはセパレータを変数として1つしか指定することができないので、
それを配列で「年、月、日」を渡せるように改良する必要があります。

「cake/libs/view/helper/form.php/」を「app/view/helper/form.php」として保存し、
「app/view/helper/form.php」の一部を下記のように修正します。

//$opt = implode($separator, $selects);
$opt = "";
$i = 0;
if (is_array($separator)) {
	foreach($selects as $select) {
		$opt .= $select.$separator[$i];
		$i++;
	}
} else {
$opt = implode($separator, $selects);
}

日付のセパレータを配列で渡すことができます。

コントローラでの指定

次に使用したいコントローラーに、フォームの設定を施します。
もしくはビュー(ctpファイル)に直接書いてもいいのかもしれませんね。

<?php
//app/controller/posts_controller.php
class PostsController extends AppController {
	var $name = 'Posts';
	//前処理
	function index(){
		//公開日の日付設定など
		$attr = array(
			'minYear' => 2008,
			'maxYear' => date('Y')+1,
			'separator' => array('年', '月', '日 '),
			'monthNames' => false
		);
		$this->set('attr', $attr);
	}
}
?>

「separator」以外は適当に自分の環境に合わせて修正してください。
最後の行で「attr」という変数でビューに渡します。

ビューで表示する

<?php echo $form->dateTime('release', 'YMD', '24', date('Y-m-d H:i'), $attr ,false); ?>

コントローラ内の「attr」からオプションデータを受け取り設定します。
これで「0000年00月00日 00:00」という表記になります。

実は時、分まで対応したかったのですが、時間の都合上後回しにしました。
さらに、日付と時間のスペースについてはセパレータの「日」の後ろに全角スペースを
配置して「日 」という力技で対応しました・・・(^^;

Leave a Reply