Joomla 2.5日历字段类型在自定义表单日期和时间选择中

Ben*_*nny 2 php xml joomla2.5

我的admin/componsents/com_xxxxx/models/forms/xxxxx.xml文件中有两个字段.

这些为Joomla 2.5后端的管理员提供输入表单

<field name="f_start" type="calendar" class="inputbox" 
             required="true" 
             format="%Y-%m-%d %H:%M:%S"
             default="0000-00-00 09:30:00" 
             label="COM_xxxxx_F_START"
             description="COM_xxxxx_F_START_DESC" 
             filter="safehtml" /> 

<field name="f_end" type="calendar" class="inputbox"
             required="true" 
             format="%Y-%m-%d %H:%M:%S"
             default="0000-00-00 19:30:30" 
             label="COM_xxxxx_F_END"
             description="COM_xxxxx_F_END_DESC" 
             filter="safehtml" /> 
Run Code Online (Sandbox Code Playgroud)

这些基本上是文章发布时的开始和结束日期.但是,在选择日期选择器/日历图标并选择日期时,该字段将更新为所选日期,但保留09:30:00默认开始时间.这似乎适用于01:30:00到11:30之间的任何一个下午时间,当选择日期时,重置到现在.

有谁能解释为什么?或者如何在日期选择器上保留默认时间?

如果结束日期也可以默认为从开始日期起28天?

提前致谢.

小智 7

单击日历图标时,日历窗口小部件会尝试将自己定位在相应文本字段中包含的日期上.由于0000-00-00无效日期,该Date.parseDate函数media/system/js/calendar-uncompressed.js尝试从格式字符串的所有组件中猜测日期.0000-00-00 09:30:00被识别为9月30日,因为09 < 12它看起来像一个月号,因此它返回Sep 30, 9:30.另一方面,0000-00-00 19:30:00不被识别为任何有效日期,并且函数返回today.因此,时间部分的差异.

例如,如果查看com_content的XML表单文件,您将看到它们不使用日历字段的默认值.

但是,您可以创建从JFormFieldCalendar派生的自定义字段类型,这将为您提供充分的灵活性.例如:

表格/ whatever.xml

<field name="f_start" type="PubDateCalendar"
       format="%Y-%m-%d %H:%M:%S" default="start" ... />
<field name="f_end" type="PubDateCalendar"
       format="%Y-%m-%d %H:%M:%S" default="end" ... />
Run Code Online (Sandbox Code Playgroud)

田/ pubdatecalendar.php

<?php
defined('_JEXEC') or die;
jimport('joomla.form.helper');
JFormHelper::loadFieldClass('calendar');

class JFormFieldPubDateCalendar extends JFormFieldCalendar
{
    public $type = 'PubDateCalendar';
    protected function getInput()
    {
        $format = $this->element['format']
                ? (string) $this->element['format']
                : '%Y-%m-%d';
        if ($this->element['default'] == 'start') {
            $this->value = strftime($format);
        } else if ($this->element['default'] == 'end') {
            $this->value = strftime($format, time() + 28 * 24 * 60 * 60);
        }
        return parent::getInput();
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

或者更适合您特定应用的任何东西.