[oneBooking 3.3.0] Собственные формы и поиск
Основная доработка — возможность создавать свои формы. Кроме обязательных полей указываете дополнительные и получаете заявку с нужной информацией. Сумма заявки определиться согласно указанным параметрам. Изначально планировал сделать эту возможность в виде модуля, но механизм стыковки уж очень непростой получался, поэтому я включил этот функционал в базовую версию.
В этот раз я решил обойтись без моделей и таблиц, а использовал формат YAML. Описание полей загружается из файла /core/components/onebooking/extras/booking.extras.yaml. В нем указываете свои поля. Для примера там же лежит файл example.booking.extras.yaml. Можете переименовать его, а можете создать новый по образцу. В файле подробно описан формат полей.
Для удобства можно создать статический чанк и указать этот файл в качестве исходника.
Для примера приведу описание поля формы типа «select»
Добавленные поля сразу появляются в диалоге создания заявки на бронирование в интерфейсе администратора
А для того, чтобы добавить поля в форму на сайте, нужно в чанке формы добавить соответствующие плейсхолдеры. Например, так
Таким образом можно делать любые формы. Надо только помнить об обязательных полях «object»,«start_date»,«end_date» и «nubmer» (что, когда и сколько). В качестве примера можно использовать стандартную форму.
Для подключения своих форм добавлены системные настройки frontend_js и frontend_css для собственных файлов стилей и скриптов. Позже постараюсь сделать примеры-заготовки.
Еще появилась очень полезная вещь — поиск доступных объектов на заданную дату. Выглядит это так
Вызывается сниппетом obSearch. Поближе посмотреть можно тут.
Также в сниппеты obCalendar, obForm и obButton добавлен параметр resource, который будет очень полезен при вызове сниппетов на странице ресурса-продукта miniShop2. Т.е. на таких страницах эти сниппеты можно вызывать без параметра object, а так
Кроме того, обновлены некоторые чанки. Они указаны в changelog. Их нужно отметить при обновлении компонента или обновить вручную.
Полная документация.
В этот раз я решил обойтись без моделей и таблиц, а использовал формат YAML. Описание полей загружается из файла /core/components/onebooking/extras/booking.extras.yaml. В нем указываете свои поля. Для примера там же лежит файл example.booking.extras.yaml. Можете переименовать его, а можете создать новый по образцу. В файле подробно описан формат полей.
Для удобства можно создать статический чанк и указать этот файл в качестве исходника.
Для примера приведу описание поля формы типа «select»
// Название поля
select_field:
// Для вывода на сайте
field: |
<label class="labelform" for="select_field">Список</label>
<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.Полная документация.
Поблагодарить автора
Отправить деньги
Комментарии: 25
А к поиску фильтры какие-то прикрутить выйдет? Или какая-то есть возможность связать с msearch2?
Нет. mSearch2 работает только с таблицами ресурсов.
А зачем?
А зачем?
Ну к примеру, чтобы можно было указать цену от и до + какие-то плюшки типа телевизора или бассейна выбрать можно было
В следующей версии добавлю. Спасибо за идею.
Не совсем так.
Если прописать свои методы и использовать свой сниппет вывода — сможет фильтровать что угодно.
Если прописать свои методы и использовать свой сниппет вывода — сможет фильтровать что угодно.
При добавлении дополнительных полей, которые должны учитываться при подсчете суммы, нужно еще добавить значение этого поля в post запрос. Иначе сумму в форме выдает без учета этого поля.
И у меня в интерфейсе «dialog» не обрабатывается некэшированный вызов obExtras.
И у меня в интерфейсе «dialog» не обрабатывается некэшированный вызов obExtras.
Проверим.
В новой версии всё работает. Сниппет obExtras больше не нужен. Можно просто указывать плейсхолдеры полей в форме — [[+my_field]]. Поля рендерятся и считаются. Обновляйтесь.
Спасибо!
По ссылке «Полная документация» — пусто, за доработку компонента — спасибо! Планируется ли разработка аналогичного компонента для суточной аренды жилья (квартир)?
Документация в процессе наполнения. Скоро будет.
Планируется ли разработка аналогичного компонента для суточной аренды жилья (квартир)?Что имеется ввиду? Почасовой?
1. Нет, период бронирования — сутки. В календаре «день» очень желательно разделить на 2 части: «до 12.00» (выселение) и «после 12.00» (расселение), так как общепринятое расчетное время 12.00.
2. В данном виде компонент оптимален для гостиниц с небольшим номерным фондом, так как форма бронирования через диалог не позволяет работать с большим количеством объектов (к примеру, на сайте 100 квартир, из них 20 однокомнатных, 40 двухкомнатных и 40 трехкомнатных).
3. Потребуется интеграция с msearch2 (или аналогом) — возможность поиска объектов по уникальному номеру, категориям (например — однокомнатные, двухкомнатные, трехкомнатные), датам заезда-выезда, стоимости, количеству спальных мест.
2. В данном виде компонент оптимален для гостиниц с небольшим номерным фондом, так как форма бронирования через диалог не позволяет работать с большим количеством объектов (к примеру, на сайте 100 квартир, из них 20 однокомнатных, 40 двухкомнатных и 40 трехкомнатных).
3. Потребуется интеграция с msearch2 (или аналогом) — возможность поиска объектов по уникальному номеру, категориям (например — однокомнатные, двухкомнатные, трехкомнатные), датам заезда-выезда, стоимости, количеству спальных мест.
1. Для этого есть параметр type. В данном случае ему нужно указать значение period. В следующей версии переименую значение в checkout для большей очевидности.
2. Почему? В чем проблема?
3. Уже есть готовый сниппет поиска. Его можно доработать. mSearch2 из коробки искать не будет. Ему нужно прописывать алгоритмы и делать свой сниппет. Дополнительно встает вопрос цены mSearch2 и работ по его доработке. Выбор ваш.
2. Почему? В чем проблема?
3. Уже есть готовый сниппет поиска. Его можно доработать. mSearch2 из коробки искать не будет. Ему нужно прописывать алгоритмы и делать свой сниппет. Дополнительно встает вопрос цены mSearch2 и работ по его доработке. Выбор ваш.
1. Спасибо, вы правы
2. Форма бронирования через диалог отлично работает с категориями объектов (люкс, стандарт, эконом и т.д). Если вместо категорий укажем объекты (например, 100 квартир) — получим огромный выпадающий список.
3. Номерной фонд гостиниц не требует фильтрации объектов, а сайт недвижимости (как и интернет-магазин) не может без нее полноценно работать. Поэтому необходима интеграция с msearch2 или его аналог.
2. Форма бронирования через диалог отлично работает с категориями объектов (люкс, стандарт, эконом и т.д). Если вместо категорий укажем объекты (например, 100 квартир) — получим огромный выпадающий список.
3. Номерной фонд гостиниц не требует фильтрации объектов, а сайт недвижимости (как и интернет-магазин) не может без нее полноценно работать. Поэтому необходима интеграция с msearch2 или его аналог.
По второму пункту. В диалоге указываются именно объекты, а не категории. Такой сущности в oneBooking нет. А зачем в диалоге указывать 100 квартир. Можно на сайте создать страницу для каждой квартиры и вызывать диалог для одной. Можно создать список как например, на картинке ниже — для каждой квартиры своя кнопка.
Кроме того, можно менять формы, диалоги на свой вкус.
Кроме того, можно менять формы, диалоги на свой вкус.
Доброго дня!
Сергей, возможно ли связывать описания с ресурсами?
При клике на описание как на этом изображении:
Сергей, возможно ли связывать описания с ресурсами?
При клике на описание как на этом изображении:
На сегодняшний день есть односторонняя связь — при сохранении ресурса в плагине по событию onDocFormSave брать описание из ресурса и сохранять в объект бронирования. А в следующей версии oneBooking я планирую добавить события MODX при создании, изменении и удалении объекта. Таким образом, появится и обратная связь. Это интересовало?
Да, спасибо.
Добрый день. Можно ли с помощью компонента реализовать почасовое бронирование?
oneBooking — посуточная система бронирования.
Обратите внимание на это дополнение с почасовым бронированием. https://modstore.pro/packages/booking/userevents Использовал в одном проекте, очень понравилось в работе.
Привет. Подойдет ли компонент для задачи с бронированием мест на определенное мероприятие? Допустим киносеанс или турпоездка. Т.е. есть фиксированное количество мест (без указания конкретного места) в группе и одна определенная дата мероприятия, нужно чтобы было видно сколько есть свободных мест и сколько осталось.
Вряд ли. Подход другой. Объект бронирования доступен в любой день. А в твоём случае мероприятие (объект бронирования) доступно только в один конкретный день.
В идеале бы еще добавить ограничения по кол-ву спальных мест.
Допустим основных мест в жилье = 3 + 1 дополнительное место = 4 гостя. Цена для 3 гостей будет та, которая указана за номер, а при выборе 4-х человек, насчитывать еще фиксированную доп. стоимость за сутки ( допустим + 1000руб или бесплатно на усмотрение хозяина). При попытке забронировать для 5-х гостей не давать им вариантов выбрать больше чем 4 гостя или выводить сообщение типа: «Номер расчитан на 4-х гостей, забронировать 2 номера этой категории для 5-х гостей?».
Большинство не читают описание на странице номера а посмотрев фотки, сразу идут калькулировать цену, выбирая кол-во гостей в форме, они бронируют с уверенностью что система им сама все предложит и скажет ( это я говорю из опыта, работаю в отеле 60 номеров в Крыму у моря). Потом отель эти погрешности решает и извиняется, типа «На самом деле нельзя было забронировать, номер не рассчитан на 5-х», а вам отвечают: «Ну система ведь дала забронировать и в ручном режиме подбираешь им варианты».
Еще я бы итоговую стоимость вынес сразу же как только выбираются даты у жилья, чтобы было наглядно видно что сумма скалькулирована, и если цена не подходит то перевыбрать даты или смотреть другой номер сразу на первом шаге.
Убрал бы иконку калькулятора которую надо догадаться нажать чтобы увидеть сумму.
Вместо выбора кол-ва номеров ( на первом шаге) сделал бы кол-во гостей, и от выбранного кол-ва гостей, считал стоимость и предлагал кол-во номеров на следующем шаге. Если выбранное пользователем кол-во гостей не превышает указанное кол-во основных мест + доп. мест, то предлагаем 1 номер, если превышает то предлагаем 2.
Как-то так. Это не более чем рекомендации.
Допустим основных мест в жилье = 3 + 1 дополнительное место = 4 гостя. Цена для 3 гостей будет та, которая указана за номер, а при выборе 4-х человек, насчитывать еще фиксированную доп. стоимость за сутки ( допустим + 1000руб или бесплатно на усмотрение хозяина). При попытке забронировать для 5-х гостей не давать им вариантов выбрать больше чем 4 гостя или выводить сообщение типа: «Номер расчитан на 4-х гостей, забронировать 2 номера этой категории для 5-х гостей?».
Большинство не читают описание на странице номера а посмотрев фотки, сразу идут калькулировать цену, выбирая кол-во гостей в форме, они бронируют с уверенностью что система им сама все предложит и скажет ( это я говорю из опыта, работаю в отеле 60 номеров в Крыму у моря). Потом отель эти погрешности решает и извиняется, типа «На самом деле нельзя было забронировать, номер не рассчитан на 5-х», а вам отвечают: «Ну система ведь дала забронировать и в ручном режиме подбираешь им варианты».
Еще я бы итоговую стоимость вынес сразу же как только выбираются даты у жилья, чтобы было наглядно видно что сумма скалькулирована, и если цена не подходит то перевыбрать даты или смотреть другой номер сразу на первом шаге.
Убрал бы иконку калькулятора которую надо догадаться нажать чтобы увидеть сумму.
Вместо выбора кол-ва номеров ( на первом шаге) сделал бы кол-во гостей, и от выбранного кол-ва гостей, считал стоимость и предлагал кол-во номеров на следующем шаге. Если выбранное пользователем кол-во гостей не превышает указанное кол-во основных мест + доп. мест, то предлагаем 1 номер, если превышает то предлагаем 2.
Как-то так. Это не более чем рекомендации.
Еще круто было бы вывести отдельно минимальную цену жилья за весь свободный период. Чтобы в номере была актуальная цифра «Цена от 1500руб» и на превью номера.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.