我遇到了一些问题,所以我很感激任何帮助。
我正在尝试在我的组件中显示动态创建的日历。新的一个与所有花哨的东西。我已经让它显示了,但就好像它没有获取发送给它的所有属性。
所以,简而言之,这就是我正在做的事情:
$attrcalendar = [
'size' => ($metadata['size'] != '') ? $metadata['size'] : '100%',
'showTime' => ($metadata['showTime'] != '') ? $metadata['showTime'] : 0,
'timeFormat' => ($metadata['timeFormat'] != '') ? '24' : '12',
'singleHeader' => ($metadata['singleHeader'] != '') ? $metadata['singleHeader'] : 0,
'todaybutton' => ($metadata['todayButton'] != '') ? true : false,
'weekNumbers' => ($metadata['weekNumbers'] != '') ? true : false,
'minYear' => ($metadata['minYear'] != '') ? $metadata['minYear'] : '1900',
'maxYear' => ($metadata['maxYear'] != '') ? $metadata['maxYear'] : '2017',
'firstDay' => '1'
];
echo JHTML::_('calendar', $defaultvalue, $calendarname, $calendarid, '%Y-%m-%d', $attrcalendar);
我正在填写用户输入的所有值,并且应该填充$ attrcalendar。 但是,使用上面的代码,当它被渲染时,我得到以下内容(我遗漏了日历的输入字段):
<button type="button" class="btn btn-secondary" id="mycalendar_btn" data-inputfield="mycalendar" data-dayformat="%Y-%m-%d" data-button="mycalendar_btn" data-firstday="0" data-weekend="0,6" data-today-btn="0" data-week-numbers="0" data-show-time="1" data-show-others="1" data-time-24="12" data-only-months-nav="0" title="Open the calendar"><span class="icon-calendar" aria-hidden="true"></span></button>
正如你所看到的,它并没有拾取今天的按钮(尝试了小/大写变量名称的所有组合),第一天,最小和最大年份(甚至尝试使用+1,-1表示这些字段)。
我还尝试编码&lt; input type =“text”...&gt;和&lt; button ...&gt;具有所有必要的属性,但是我无法初始化它。我尝试过:
elements = document.querySelectorAll("#the-id-of-the-input");
for (i = 0; i < elements.length; i++) {
JoomlaCalendar.init(elements[i]);
}
但是由于错误,没有有效的输入,日历不会被渲染。我尝试了很多组合,甚至都想不到它们。 我猜我在JoomlaCalendar.init中做错了什么,但我根本想不出来。
如果我打电话
,我可以让它有点功能任何形式的帮助都非常感谢。 :)
答案 0 :(得分:0)
今天属性在您的代码中不正确。来自 -
'todaybutton' => ($metadata['todayButton'] != '') ? true : false,
要
'todayBtn' => ($metadata['todayButton'] != '') ? true : false,
如果你想对日历对象init
对象所期望的元素是包含输入字段的div。
<div class="field-calendar">
<div class="input-append">
<input type="text" id="filters_startDate" name="filters[startDate]" value="" class="tjrsmall-input dash-calendar validate-ymd-date filter-hide" onchange="this.form.submit;" placeholder="FROM (YYYY-MM-DD)" data-alt-value="" autocomplete="off"/>
<button type="button" class="btn btn-secondary"
id="filters_startDate_btn"
data-inputfield="filters_startDate"
data-dayformat="%Y-%m-%d"
data-button="filters_startDate_btn"
data-firstday="0"
data-weekend="0,6"
data-today-btn="1"
data-week-numbers="1"
data-show-time="0"
data-show-others="1"
data-time-24="24"
data-only-months-nav="0"
>
<span class="icon-calendar"></span>
</button>
</div>
</div>
<script>
var elements = document.querySelectorAll(".field-calendar");
for (i = 0; i < elements.length; i++) {
JoomlaCalendar.init(elements[i]);
}
</script>
更新: 如果页面上没有日历字段,您可能还需要添加JS文件。
$tag = Factory::getLanguage()->getTag();
$calendar = Factory::getLanguage()->getCalendar();
$direction = strtolower(Factory::getDocument()->getDirection());
// Get the appropriate file for the current language date helper
$helperPath = 'system/fields/calendar-locales/date/gregorian/date-helper.min.js';
if (!empty($calendar) && is_dir(JPATH_ROOT . '/media/system/js/fields/calendar-locales/date/' . strtolower($calendar)))
{
$helperPath = 'system/fields/calendar-locales/date/' . strtolower($calendar) . '/date-helper.min.js';
}
// Get the appropriate locale file for the current language
$localesPath = 'system/fields/calendar-locales/en.js';
if (is_file(JPATH_ROOT . '/media/system/js/fields/calendar-locales/' . strtolower($tag) . '.js'))
{
$localesPath = 'system/fields/calendar-locales/' . strtolower($tag) . '.js';
}
elseif (is_file(JPATH_ROOT . '/media/system/js/fields/calendar-locales/' . strtolower(substr($tag, 0, -3)) . '.js'))
{
$localesPath = 'system/fields/calendar-locales/' . strtolower(substr($tag, 0, -3)) . '.js';
}
$cssFileExt = ($direction === 'rtl') ? '-rtl.css' : '.css';
// Load polyfills for older IE
JHtml::_('behavior.polyfill', array('event', 'classlist', 'map'), 'lte IE 11');
// The static assets for the calendar
JHtml::_('script', $localesPath, false, true, false, false, true);
JHtml::_('script', $helperPath, false, true, false, false, true);
JHtml::_('script', 'system/fields/calendar.min.js', false, true, false, false, true);
JHtml::_('stylesheet', 'system/fields/calendar' . $cssFileExt, array(), true);