2007年9月14日(金曜日)

Smartyのhtml_select_date,html_select_timeプラグイン用に、XCube_Propertyを作成

カテゴリー: - Ryuji @ 16時29分28秒

XOOPS Cubeのモジュール開発をしていると、日時を入力する画面を作成することがよくあります。

今回は、Smartyのhtml_select_date,html_select_timeプラグインで入力した値をunixtimeで保持するXCube_Propertyクラスをつくってみました。

下記のようなコードです。


class Ryus_UnixtimeProperty extends XCube_AbstractProperty
{
	function set($value)
	{
		if (strlen(trim($value)) > 0) {
			$this->mValue = intval($value);
		}
		else {
			$this->mValue = null;
		}
	}
	function hasFetchControl()
	{
		return true;
	}
	/**
	 * Fetches.
	 * @param XCube_ActionForm $form
	 */
	function fetch(&$form)
	{

$year = $form->mContext->mRequest->getRequest($this->mName.'Year'); $month = $form->mContext->mRequest->getRequest($this->mName.'Month'); $day = $form->mContext->mRequest->getRequest($this->mName.'Day');

$hour = $form->mContext->mRequest->getRequest($this->mName.'Hour'); $minute = $form->mContext->mRequest->getRequest($this->mName.'Minute'); $second = $form->mContext->mRequest->getRequest($this->mName.'Second'); if($year === null || $month === null || $day === null || $hour === null || $minute === null || $second === null){ $this->set(null); }else{ $datetime = sprintf("%d-%d-%d %d:%d:%d", $year, $month, $day, $hour, $minute, $second); $unixtime = strtotime($datetime); $this->set($unixtime); } }

}

ActionFormのprepareには次のように書きます


function prepare()
{
		$this->mFormProperties['schedule_unixtime'] =& new Ryus_UnixtimeProperty('schedule_unixtime');
}

mFormPropertiesに、上記の例ではschedule_unixtimeという名称で宣言してますので、
html_select_date, html_select_timeプラグインでprefixにschedule_unixtimeを指定すると、
POSTされた値を元に、Ryus_UnixtimePropertyが自動でunixtimeに変換して値を保持します。

テンプレートの例


	<{html_select_date prefix="schedule_unixtime" time=$actionForm->get('schedule_unixtime') field_order="YMD" month_format="%m"}>
	<{html_select_time prefix="schedule_unixtime" time=$actionForm->get('schedule_unixtime')}>

ただ、この方法だとPOSTされた年月日時分秒をunixtimeに変換して保持し、Smartyプラグイン側でunixtimeから年月日時分秒に変換という流れになるので、2月30日というありえない日付を入力したときに、3月2日になってしまうのが難点です(^^;

もうちょっと工夫しないと仕事では使えませんね(^^;、


RSS feed for comments on this post.

ƤˤϡޤȤդƤޤ

Ȥ

ʤߥȤդ뤳ȤϽޤ

10 queries. 0.010 sec.
Powered by WordPress Module based on WordPress ME & WordPress

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.