如何在Joomla表单中的可重复字段中使用日历字段?

时间:2014-08-27 23:20:48

标签: joomla joomla3.3

我想允许用户输入多个日期,并希望我可以使用repeatable表单字段类型(Joomla 3.3的新版本)。

我确实使用行添加/删除项目的模式弹出窗口,但日历图标不会弹出日历选择器。我只尝试了text输入,这似乎没问题。

我的表单定义的相关部分:

<field
        name="event_dates"
        type="repeatable"
        id="event_dates"
        icon="calendar"
        label="Event calendar dates"
        select="Select dates"
    >
    <fields name="jmfields_event_dates">
        <fieldset 
                name="event_dates_modal"
                repeat="true"
                hidden="true">
            <field 
                name="event_date"
                type="calendar"
                format="%d-%m-%Y"
                label="Date"
                />
        </fieldset>
    </fields>
</field>

3 个答案:

答案 0 :(得分:1)

我还没有尝试在Repeatable字段中包含一个日历字段,但是可重复字段太多了,但有一堆javascript问题/冲突。检查浏览器错误控制台是否存在任何此类问题。我建议等到可重复场变得更稳定。

答案 1 :(得分:0)

我也想做同样的事情,而不是默认的日历字段,我最终使用普通文本字段上的jQuery日期选择器。您在页面上添加jQuery脚本以定位输入字段,并且您需要稍作解决,直到默认日历的实际修复完毕为止。

您的标题中需要以下文件:

JHtml::_('jquery.framework');
JHtml::_('jquery.ui');
$doc =& JFactory::getDocument();
// loaded from the code.jquery.com site
$doc->addStylesheet('http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css');
// I downloaded the datepicker only and placed it in this folder
$doc->addScript(JURI::root().'/media/jui/js/datepicker/jquery-ui.min.js');

字段的xml:

<!-- Course_date Field. Type: Repeatable. (joomla) -->
<field
    type="repeatable"
    name="course_date"
    label="Course Dates"
    description="COM_LEARNINGMANAGER_EVENT_COURSE_DATE_DESCRIPTION"
    id="course_date"
    class="course_dates"
    select="COM_LEARNINGMANAGER_EVENT_COURSE_DATE_SELECT"
    icon="list"
    maximum="50">
    <fields name="course_date_fields" label="">
        <fieldset hidden="true" name="course_date_modal" repeat="true">
            <!-- Course Field. Type: Courses. (custom) -->
            <field
                type="courses"
                name="course"
                label="COM_LEARNINGMANAGER_EVENT_COURSE_LABEL"
                class="list_class"
                button="false"
            />
            <!-- Date Field. Type: Text. (joomla) -->
            <field
                type="text"
                name="date"
                label="COM_LEARNINGMANAGER_EVENT_DATE_LABEL"
                size="20"
                maxlength="50"
                description="COM_LEARNINGMANAGER_EVENT_DATE_DESCRIPTION"
                class="text_area datepicker"
                readonly="false"
                disabled="false"
                filter="STRING"
                message="Error! Please add date here."
                hint="COM_LEARNINGMANAGER_EVENT_DATE_HINT"
            />
        </fieldset>
    </fields>
</field>

以下是您需要添加到default.php或edit.php文件的脚本:

<script type="text/javascript">
// means your repteable field can only take 50 rows
<?php $fieldNrs = range(1,50,1); ?>
jQuery('input.form-field-repeatable').on('row-add', function (e) {
<?php foreach($fieldNrs as $nr): ?>
    jQuery('#jform_course_date_fields_date-<?php echo $nr ?>').datepicker(
        {
            minDate: -1,
            prevText: '',
            nextText: '',
            maxDate: '+3M',
            firstDay: 1,
            dateFormat: 'yy-mm-dd',
            onSelect: function(dateText, inst) {
            jQuery('#jform_course_date_fields_date-<?php echo $nr ?>').val(dateText);
        }
    });
<? endforeach; ?>
});
</script>

享受!

答案 2 :(得分:-1)

您可以尝试使用this(&#34;乘数模块&#34;)。我使用不同的方法获得与Joomla可重复表单字段类型相同的结果,并且还避免弹出&#34;弹出窗口弹出&#34;。仍处于开发阶段,但也许您可以尝试使用该概念。问候。

我为解决类似问题做了什么?

我在默认的Joomla可重复表单字段类型中遇到了类似的问题,尤其是使用&#34; pop-up&#34;表单字段类型(例如Joomla&#34; date&#34;)。因此,我创建了某种模块模式(mod_multiplier),其中我使用了不同的方法 - &gt; 我不会重复字段(部分),我想使用相同的部分进行多次插入

模块mod_multiplier

内部模块xml文件是3个保留字段&#34;包装&#34;,&#34;转发器&#34;和&#34;内容&#34;。

内部&#34;包装&#34;是&#34;可重复的地方&#34;字段:

<fieldset name="basic" addfieldpath="/modules/mod_multiplier/models/fields">
  <!-- Wrapper is container for repeatable fields-->
  <fields name="wrapper">

    <!--This is the place where you insert your fields-->

  </fields>
  <field name="repeater" label="" type="repeater" />
  <field name="content" hidden="true" label="Content" type="hidden" />
</fieldset>

所有内容都将存储在&#34;内容&#34; JSON格式的字段。每当我们按表格时,#34;添加&#34;按钮我们将添加一行数据到&#34;内容&#34;领域。毕竟,内部&#34;内容&#34;我们将有数据行。

如何查看tmpl / default.php文件以及如何获取字段值?

分层数据结构有3个级别:行,行和字段。

  • 所有数据=&gt; $行
  • 一行数据=&gt; $行
  • one field =&gt; $行向&GT; FIELD_NAME

mod_multiplier的实际例子:

内部&#34;包装&#34;是字段&#34; country&#34;,&#34; city&#34;我们按名称(在tmpl / default.php中)调用它们,如下所示:

<ul>
<?php foreach ($rows as $row):?>
  <li>
    <?php echo $row->country;?>:<?php echo $row->city;?>    
  </li>  
<?php endforeach; ?>
</ul>