2010年2月25日木曜日

cakephp jscalendar で ExformHelper

Rails activescaffold の activecalendar のように、カレンダをなんとかしてぇ。というコンセプトで書いてみました。

ヘルパ exform.php っす。

<?php
class ExformHelper extends FormHelper {
var $helpers = array('Html','Javascript');
/**
* Returns a set of SELECT elements for a full datetime setup: day, month and year, and then time.
*
* Attributes:
*
* - 'monthNames' If set and false numbers will be used for month select instead of text.
* - 'minYear' The lowest year to use in the year select
* - 'maxYear' The maximum year to use in the year select
* - 'interval' The interval for the minutes select. Defaults to 1
* - 'separator' The contents of the string between select elements. Defaults to '-'
*
* @param string $fieldName Prefix name for the SELECT element
* @param string $dateFormat DMY, MDY, YMD or NONE.
* @param string $timeFormat 12, 24, NONE
* @param string $selected Option which is selected. -> Not used
* @param string $attributes array of Attributes. -> Equals to options
* @param bool $showEmpty Whether or not to show an empty default value.
* @return string The HTML formatted OPTION element
*/
function dateTime($fieldName, $dateFormat = 'YMD', $timeFormat = '24', $selected = null, $attributes = array(), $showEmpty = true) {
// dateFormat が DMY になってしまい、SQL での更新で例外が発生してしまう
// だから、ハードコード
//if( $dateFormat == 'DMY' ) {
// $dateFormat = "%d/%m/%Y";
//} else if( $dateFormat == 'MDY' ) {
// $dateFormat = "%m/%d/%Y";
//} else {
$dateFormat = "%Y/%m/%d";
//}
$edit_id = $this->domId($attributes);
$img_id = $edit_id['id'] . "-trigger";
$cal_img = $this->Html->image("calendar.png", array("alt"=>"calendar","id"=>$img_id));
$out = $this->text($fieldName, $attributes) . $cal_img
. $this->Javascript->codeBlock(
'Calendar.setup({'
. ' button: "' . $img_id . '",'
. ' inputField: "' . $edit_id['id'] . '",'
. ' ifFormat: "' . $dateFormat . ' %H:%M:%S",'
. ' dfFormat: "' . $dateFormat . ' %H:%M:%S",'
. ' showsTime: true,'
. ' time24: ' . (($timeFormat == '12') ? 'false' : 'true')
. '});'
);
return $out;
}

}
?>




コントローラに


var $helpers = array('Html', 'Form', 'Exform', 'Javascript');

ってやって、ビューには

echo $exform->input('limit_date');

とかで使います。もちろん、レイアウトファイルのヘッダには

echo $html->css('jscalendar-1.0/calendar-win2k-cold-1');
echo $javascript->link('jscalendar-1.0/calendar');
echo $javascript->link('jscalendar-1.0/lang/calendar-ja');
echo $javascript->link('jscalendar-1.0/calendar-setup');

を忘れずに…。

0 件のコメント: