Home > CakePHP > CakePHP修行

CakePHP修行 Archive

途中経過(CakePHP修行 #11)

久々の更新です。ネタがありませんが・・・。

2008-04-08_214531.png

継続するって難しい…。
1週間に2,3つのクオリティの高いエントリーを投稿し続けるαブロガーってやっぱ凄いですね。

  • コメント (Close): 0
  • トラックバック (Close): 0

DB日付値を任意のフォーマットで取得するコンポーネント(CakePHP修行 #10)

カレンダー・スケジュールに関するアプリを作っている関係上、どうしても日付に関する処理が多くなってしまいます。
DBに保存した日付値を任意のフォーマットに変換してくれるコンポーネントやヘルパーがデフォルトで用意されていないか探してみたのですが見つからない…。
多分、Timeヘルパーあたりにあると思うのですが、ヘルパーだとController内で使用することが出来ないので「DatetimeComponent」なるコンポーネントを自作してみました。

componentsフォルダにdatetime.phpファイルを作成し、下記のソースをコピペ。

・app/controllers/components/datetime.php

<?php
class DatetimeComponent extends Object
{
	var $controller = null;

	function __construct(){
		parent::__construct();
	}

	function startup(&amp;amp;$controller){
		$this->controller =&amp;amp; $controller;
	}

	function toFormat($elem, $format){
		//2008-02-27 00:00:00
		$set_year = substr($elem, 0, 4);    //年
		$set_month = substr($elem, 5, 2);    //月
		$set_day = substr($elem, 8, 2);        //日
		$set_hour = substr($elem, 11, 2);    //時
		$set_minute = substr($elem, 14, 2);    //分
		$set_second = substr($elem, 17, 2);    //秒

		return date($format, mktime($set_hour, $set_minute, $set_second, $set_month, $set_day, $set_year));
	}
}
?>

フォーマットの指定はPHPの標準関数であるDate関数と同じ形式です。
↓こんな感じで使用します。

$yyyy_m_d = $this->Datetime->toFormat($this->data['Schedule']['start'],'Y/n/j');

登録したスケジュールをカレンダーに表示(CakePHP修行 #9)

今回はカレンダーページ上に、登録したスケジュールのタイトルを表示する処理を実装します。

コントローラーのCalendarアクションを変更します。
・app/controllers/schedules_controller.php

//calendar
function calendar($year = null, $month = null){
	//システムメッセージをセット
	$this->set('sys_msg', $this->Session->read('sys_msg'));
	$this->Session->delete('sys_msg');

	//指定された年月を取得/指定なしの場合はシステム日付を取得
	if($year == null || $month == null){
		$Month = new Calendar_Month_Weekdays( date('Y'), date('m'), 0 );
		$year = date('Y');
		$month = date('m');
	} else {
		$Month = new Calendar_Month_Weekdays( $year, $month, 0 );
	}
	//PEARよりカレンダー情報を読み込み
	$Month->build();
	$this->set('month', $Month);
	//取得した年月、次月、前月をYYYY/MM形式で変数にセット
	$this->set('next_year_month', date("Y/m", mktime(0, 0, 0, $month+1, 1, $year)));
	$this->set('this_year_month', date("Y/m", mktime(0, 0, 0, $month, 1, $year)));
	$this->set('prev_year_month', date("Y/m", mktime(0, 0, 0, $month-1, 1, $year)));

	//取得した年月のスケジュール情報をScheduleから取得
	$cond = array(
		'AND' => array(
		array("Schedule.start" => ">=$year-$month-01")
		,array("Schedule.start" => "< =$year-$month-31")
		)
	);
	$this->set('schedules', $this->Schedule->findAll($cond));
}

続きを読む

ホーム > CakePHP > CakePHP修行

検索
フィード
メタ
お城
STUDIO KINGDOM

Return to page top