Joomla日历> 3.7版本

时间:2018-02-01 15:23:15

标签: joomla calendar joomla-extensions

我遇到了一些问题,所以我很感激任何帮助。

我正在尝试在我的组件中显示动态创建的日历。新的一个与所有花哨的东西。我已经让它显示了,但就好像它没有获取发送给它的所有属性。

所以,简而言之,这就是我正在做的事情:

$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中做错了什么,但我根本想不出来。

如果我打电话

,我可以让它有点功能

任何形式的帮助都非常感谢。 :)

1 个答案:

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