Smartyのhtml_select_date,html_select_timeプラグイン用に、XCube_Propertyを作成
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.
ƤˤϡޤȤդƤޤ
Ȥ
ʤߥȤդ뤳ȤϽޤ