2

我想让用户能够输入多个日期,并希望我可以使用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>
4

3 回答 3

1

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

于 2014-08-28T13:27:10.550 回答
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>

享受!

于 2015-09-11T16:31:42.540 回答
-1

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

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

我对默认的 Joomla 可重复表单字段类型也有类似的问题,尤其是“弹出”表单字段类型(例如 Joomla“日期”)。因此,我创建了某种模块模式(mod_multiplier),其中我使用了不同的方法 ->我不会重复字段(部分)的形式,我想使用相同的部分进行多次插入

模块 mod_multiplier

模块 xml 文件内部有 3 个保留字段“包装器”、“中继器”和“内容”。

“包装器”内部是“可重复”字段的位置:

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

所有内容都将以 JSON 格式存储在“内容”字段中。每次我们按下表单的“添加”按钮时,我们都会在“内容”字段中添加一行数据。毕竟,在“内容”内部,我们将拥有多行数据。

tmpl/default.php 文件内部的外观以及如何获取字段值?

分层数据结构有 3 个层次:行、行和字段。

  • 所有数据 => $rows
  • 一行数据 => $row
  • 一个字段 => $row->field_name

来自 mod_multiplier 的实际示例:

在“包装器”内部是字段“国家”和“城市”,我们按名称(在 tmpl/default.php 内部)调用它们,如下所示:

<ul>
<?php foreach ($rows as $row):?>
  <li>
    <?php echo $row->country;?>:<?php echo $row->city;?>    
  </li>  
<?php endforeach; ?>
</ul>
于 2015-02-15T13:56:21.580 回答