Как я могу использовать поле календаря в повторяющемся поле в форме 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>