Бронирование представляет собой товар с дополнительными свойствами - датой начала бронирования и датой завершения бронирования. При добавлении такого товара в корзину проверяется, свободны ли заданные даты для бронирования. Такая же проверка производится для товаров в корзине при оформлении заказа.
Есть возможность изменять логику проверки свободных дат с помощью плагинов.
При отмене заказа связанные с ним бронирования удаляются.
Менеджер может добавлять и изменять бронирования с помощью модуля.
Компонент бесплатен благодаря поддержке сообщества.
Установить, запустить модуль. Перед этим обязательно должен быть установлен Commerce. В списке событий плагин Booking должен идти после Commerce.
<form action="#" data-commerce-action="add">
<input type="hidden" name="id" value="[*id*]">
<input id="checkin" name="meta[begin]" placeholder="начало" />
<input id="checkout" name="meta[end]" placeholder="конец" />
<button type="submit">Добавить</button>
</form>
После добавления в корзину товару добавится также поле meta[type] со значением booking. При проверке корзины в процессе оформления заказа может быть добавлено также поле meta[notavailable], чтобы можно было показать, какие товары стали недоступны для бронирования.
В параметрах плагина Booking задается:
- модель MODxAPI для работы с документами (по умолчанию - \modResource);
- шаблоны документов для бронирования, через запятую;
- имя тв-параметра в котором указывается цена бронирования за сутки;
- формат даты, который используется на сайте;
- ID статуса отмены заказа;
- имя лексикона для использования на сайте.
Вызывается после расчета стоимости бронирования. Можно изменить стоимость или добавить дополнительные свойства.
Параметры:
Имя параметра | Передается по ссылке | Описание |
---|---|---|
price | Да | стоимость бронирования |
itemObj | Да | объект MODxAPI для документа |
item | Да | данные товара в корзине |
days | Нет | длительность бронирования в сутках |
Вызывается после проверки дат для бронирования. Позволяет реализовать дополнительную логику проверки.
Параметры:
Имя параметра | Передается по ссылке | Описание |
---|---|---|
itemObj | Да | объект MODxAPI для документа |
begin | Нет | дата начала бронирования |
end | Нет | дата завершения бронирования |
available | Да | результат проверки (true или false) |
Вызов:
ci()->booking->метод(параметры);
Параметры:
- id документа;
- дата начала;
- дата завершения;
- формат даты в параметрах (если не указан, то берется из настроек плагина).
Возвращает true или false.
$result = ci()->booking->isAvailable(10, '01.01.2024', '10.01.2024', 'd.m.Y');
Параметры:
- id документа;
- дата начала;
- дата завершения;
- формат даты в параметрах (если не указан, то берется из настроек плагина).
Возвращает массив с датами.
$result = ci()->booking->getReservations(10, '01.01.2024', '10.01.2024', 'd.m.Y');
[
['2023-12-20', '2024-01-03'],
['2024-01-05', '2024-01-07'],
]
На основе MODxAPI.
use Pathologic\Commerce\Booking\Model;
$model = new Model($modx);
$result = $model->create([
'docid' => 10, //id документа
'begin' => '2024-01-01', //дата начала
'end' => '2024-01-10', //дата завершения
'orderid' => 0, //для связи с заказом
'description' => 'тест', //описание
'hash' => '' //хэш записи, если не указывать, то создастся автоматически
])->save();
let bookedDates;
$.post('/booking/reservations', {
begin: '01.01.2024',
end: '10.01.2024',
id: 10,
}, function(response) {
if(response instanceof Array) {
bookedDates = response.map(d => {
if (d instanceof Array) {
const start = new Date(d[0]);
const end = new Date(d[1]);
return [start, end];
}
});
}
}, 'json');