2

我的 admin/components/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" /> 

这些本质上是文章发表的开始和结束日期。但是在选择DatePicker / Calendar图标并选择该字段的日期以更新为所选择的日期但保留09:30:00默认开始时间。这似乎适用于 01:30:00 到 11:30 之间的时间,任何下午的时间都会在选择日期后重置为现在。

谁能解释为什么?或者如何保持日期选择器的默认时间?

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

提前致谢。

4

2 回答 2

7

单击日历图标时,日历小部件会尝试将自身定位在相应文本字段中包含的日期上。由于0000-00-00日期无效,Date.parseDate函数 inmedia/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" ... />

字段/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();
    }
}
?>

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

于 2012-11-22T23:56:40.717 回答
1

也许这对像我这样正在寻找这个问题的答案但在当前版本的 Joomla 3.3.6 上的人会有所帮助:

<field
  name="birth_day"
  type="calendar"
  label="COM_PERSONS_PERSON_FIELD_BIRTHDAY_LABEL"
  description="COM_PERSONS_PERSON_FIELD_BIRTHDAY_DESC"
  class="inputbox" 
  size="20"
  format="%Y-%m-%d"
  filter="user_utc" />
于 2015-01-13T00:45:00.270 回答