[oneBooking] Собственные формы и поиск
Основная доработка — возможность создавать свои формы. Кроме обязательных полей указываете дополнительные и получаете заявку с нужной информацией. Сумма заявки определиться согласно указанным параметрам. Изначально планировал сделать эту возможность в виде модуля, но механизм стыковки уж очень непростой получался, поэтому я включил этот функционал в базовую версию.
В этот раз я решил обойтись без моделей и таблиц, а использовал формат YAML. Описание полей загружается из файла /core/components/onebooking/extras/booking.extras.yaml
. В нем указываете свои поля. Для примера там же лежит файл example.booking.extras.yaml
. Можете переименовать его, а можете создать новый по образцу. В файле подробно описан формат полей. Для удобства можно создать статический чанк и указать этот файл в качестве исходника.
Для примера приведу описание поля формы типа «select»
// Название поля select_field: // Для вывода на сайте field: | <label class="labelform" for="select_field">Список</label><br> <select class="ob-extras-textarea form-control" name="select_field" id="select_field"> <option value="500">Один</option> <option value="1000" selected>Два</option> <option value="1500">Три</option> </select> // Название поля label: Список // Учитывать стоимость один раз или каждый день apply_once: 0 // Учитывать сумму в акциях или нет calc_after: 0 // Признак, что поле не информационное и его нужно учитывать в расчетах стоимости. calculate: 1 // Признак, что поле обязательное required: 1 // Тип поля (для интерфейса администратора) type: select // Значение по-умолчанию default: 500 // Элементы списка в формате "стоимость:заголовок в списке" items: 500: Один (500) 1000: Два (1000) 1500: Три (1500)
Добавленные поля сразу появляются в диалоге создания заявки на бронирование в интерфейсе администратора
А для того, чтобы добавить поля в форму на сайте, нужно в чанке формы добавить соответствующие плейсхолдеры. Например, так
<form> ... <div class="form-group"> [[+city]] </div> <div class="form-group"> [[+select]] </div> <div class="form-group"> [[+radio]] </div> </form>
Таким образом можно делать любые формы. Надо только помнить об обязательных полях «object»,«start_date»,«end_date» и «nubmer» (что, когда и сколько). В качестве примера можно использовать стандартную форму.
Для подключения своих форм добавлены системные настройки frontend_js
и frontend_css
для собственных файлов стилей и скриптов. Позже постараюсь сделать примеры-заготовки.
Еще появилась очень полезная вещь — поиск доступных объектов на заданную дату. Выглядит это так
Вызывается сниппетом obSearch
.
Также в сниппеты obCalendar
, obForm
и obButton
добавлен параметр resource
, который будет очень полезен при вызове сниппетов на странице ресурса-продукта miniShop2. Т.е. на таких страницах эти сниппеты можно вызывать без параметра object, а так
[[!obCalendar? &recource=`[[*id]]`]] // или даже без параметра [[!obCalendar?]]
Объект автоматически подтянется из связи «объект-продукт».
Кроме того, обновлены некоторые чанки. Они указаны в changelog. Их нужно отметить при обновлении компонента или обновить вручную.
Для информации
Компонент из простого календаря бронирования постепенно вырос в систему бронирования. Много уже добавлено. И еще планируется. В связи с чем стоимость компонента выросла. Но все равно ниже аналогичной в Wordpress.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()