У меня два поля в файле 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" />
Это, по сути, даты начала и окончания публикации статьи. однако при выборе значка datepicker / calendar и выборе даты поле обновляется до выбранной даты, но сохраняет время начала по умолчанию 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
признано 30 сентября, потому что 09 < 12
, поэтому он выглядит как месяц, и, таким образом, он возвращается Sep 30, 9:30
. С другой стороны, 0000-00-00 19:30:00
не признается как действительная дата, и функция возвращается today
. Отсюда разница во временной части.
Если вы посмотрите, например, на файлы формы XML для com_content, вы увидите, что они не используют значения по умолчанию для полей календаря.
Тем не менее вы могли создать настраиваемый тип поля, полученный из 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(); } } ?>
или того, что лучше подходит вашему конкретному приложению.
Возможно, это будет полезно для кого-то вроде меня, который искал ответ на этот вопрос, но в текущей версии 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" />