【问题标题】:How can I use a calendar field in a repeatable field in a Joomla form?如何在 Joomla 表单的可重复字段中使用日历字段?
【发布时间】:2014-08-27 23:20:47
【问题描述】:

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

【问题讨论】:

    标签: joomla joomla3.3


    【解决方案1】:

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

    【讨论】:

    • 可惜,这将是处理多个日期的好方法。我在控制台中没有收到错误,但我注意到日历按钮都具有相同的 ID。
    • @JanMisker "日历按钮都具有相同的 ID" - 这很有趣,因为它肯定会使页面上的任何代码行为异常
    【解决方案2】:

    我也想这样做,而不是默认的日历字段,我最终在普通文本字段上使用 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>
    

    享受吧!

    【讨论】:

      【解决方案3】:

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

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

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

      模块 mod_multiplier

      模块 xml 文件中包含 3 个保留字段“wrapper”、“repeater”和“content”。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        相关资源
        最近更新 更多