Joomla 日历 > 3.7 版本
Joomla Calendar > 3.7 version
我 运行 遇到了一些问题,因此非常感谢您的帮助。
我正在尝试在我的组件中显示动态创建的日历。新的所有花哨的东西。我可以显示它,但它好像没有获取发送给它的所有属性。
所以,简而言之,这就是我正在做的事情:
$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>
如您所见,它没有选择 todaybutton(尝试了 smaller/upper case 变量名称的所有组合)、firstday、min 和 max year(甚至为这些字段尝试了 +1、-1)。
我还尝试使用所有必要的属性编写 和 ,但我无法对其进行初始化。我试过:
elements = document.querySelectorAll("#the-id-of-the-input");
for (i = 0; i < elements.length; i++) {
JoomlaCalendar.init(elements[i]);
}
但是由于错误,没有有效输入,日历没有得到呈现。我尝试了很多组合,甚至都想不出来。
我猜我在 JoomlaCalendar.init 部分做错了什么,但我就是想不通。
如果我调用
,我可以让它发挥一些作用
非常感谢任何形式的帮助。 :)
您的代码中的 Today 属性不正确。从 -
更改
'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);
我 运行 遇到了一些问题,因此非常感谢您的帮助。
我正在尝试在我的组件中显示动态创建的日历。新的所有花哨的东西。我可以显示它,但它好像没有获取发送给它的所有属性。
所以,简而言之,这就是我正在做的事情:
$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>
如您所见,它没有选择 todaybutton(尝试了 smaller/upper case 变量名称的所有组合)、firstday、min 和 max year(甚至为这些字段尝试了 +1、-1)。
我还尝试使用所有必要的属性编写 和
elements = document.querySelectorAll("#the-id-of-the-input");
for (i = 0; i < elements.length; i++) {
JoomlaCalendar.init(elements[i]);
}
但是由于错误,没有有效输入,日历没有得到呈现。我尝试了很多组合,甚至都想不出来。 我猜我在 JoomlaCalendar.init 部分做错了什么,但我就是想不通。
如果我调用
,我可以让它发挥一些作用非常感谢任何形式的帮助。 :)
您的代码中的 Today 属性不正确。从 -
更改'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);