我的 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" />
这些基本上是文章发表的开始和结束日期。 however when selecting the datepicker/calendar icon and choosing a date the 字段更新为所选日期,但保留 09:30:00 默认开始时间。 这似乎适用于 01:30:00 到 11:30 之间的时间,任何下午时间都会在选择日期时重置为现在。
谁能解释一下为什么? 或者如何在日期选择器上保留默认时间?
如果结束日期也可以默认为从开始日期算起的 28 天?
提前致谢。
最佳答案
单击日历图标时,日历小部件会尝试将自己定位在相应文本字段中包含的日期上。作为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 的自定义字段类型,这将为您提供充分的灵 active 。例如:
表单/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();
}
}
?>
或更适合您的特定应用的任何东西。
关于php - 自定义表单日期和时间选择中的 Joomla 2.5 日历字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11648167/