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);