Как я могу использовать поле календаря в повторяющемся поле в форме Joomla?

Я бы хотел, чтобы пользователи могли вводить несколько дат, и надеялся, что смогу использовать 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 ответа

Я не пытался иметь поле календаря внутри поля Repeatable, но поле Repeatable слишком глючное, но с множеством проблем / конфликтов JavaScript. Проверьте в консоли браузера ошибки на наличие подобных проблем. Я бы предложил подождать, пока Repeatable Field станет более стабильным.

Я также хотел сделать то же самое, и вместо поля календаря по умолчанию я использовал вместо этого палитру 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>

Наслаждайтесь!

Вы можете попробовать с этим ("Модуль множителя"). Я использовал другой подход, чтобы получить тот же результат, что и с повторяемым типом поля формы Joomla, а также избегать "всплывающих окон внутри всплывающих окон". Все еще в стадии разработки, но, возможно, вы можете попробовать эту концепцию. С уважением.

Что я сделал, чтобы решить подобную проблему?

У меня была похожая проблема с повторяющимся типом поля формы Joomla по умолчанию, особенно с "всплывающими" типами полей формы (например, Joomla "date"). Из-за этого я создал какой-то шаблон модуля (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 уровня: строки, строки и поля.

  • все данные => $ строк
  • одна строка данных => $ строка
  • одно поле => $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>
Другие вопросы по тегам