[oneBooking] Небольшая оптимизация
В этой версии проведены небольшие улучшения и исправления. Основные доработки коснулись функционала пользовательских полей. Теперь с ними работать стало проще. Сниппет obExtras для них больше не нужен. В форму достаточно вставить плейсхолдер своего поля [[+myfield]]
. Он будет отрендерен согласно описанию. Также исправлена ошибка, когда пользовательские поля не учитывались при запросе суммы брони.
Вот полный список изменений.
- В чанке
tpl.calendar.cell.info
доступен ещё один плейсхолдер[[+description]]
. - В сниппет
ob.Calendar
добавлен параметр «refreshCalendar» для отключения обновления календаря после бронирования. - В сниппеты
ob.Calendar
,obForm
,obSearch
иobButton
добавлен параметрredirectTo
. - Добавлена системная настройка
maximum_number
, указывающая максимально допустимое количество объектов для бронирования. - Удален сниппет
obExtras
, так как необходимости в нем больше нет. - Переработан javascript.
Подробнее остановлюсь на параметре «redirectTo». В нём можно указать id страницы с информацией об успешной операции, на которую будет перенаправлен пользователь после бронирования. После переадресации к url страницы будут добавлены 2 параметра: bid
и back
. В первом указывается номер заявки бронирования. Второй — это номер страницы, на которой пользователь находился до переадресации. Они пригодятся, чтобы получить информацию о заявке и вернуться обратно на страницу бронирования.
Пример страницы успешного бронирования
Создаем сниппет getBookingInfo
с таким содержимым (2 варианта):
// Вариант 1. Через PDO <?php $booking = (int) $_GET['bid']; $sql = 'SELECT Booking.*, Objects.name as object_name FROM ' . $modx->config['table_prefix'] . 'onebooking_reserved Booking INNER JOIN '. $modx->config['table_prefix'] .'onebooking_objects Objects ON Booking.object=Objects.id WHERE Booking.id = :id'; $stmt = $modx->prepare($sql); $data=array(); if ($stmt->execute(array('id'=> $booking))) { $data = $stmt->fetch(PDO::FETCH_ASSOC); } $data['back'] = $modx->makeUrl($_GET['back']); return $modx->getChunk('successBooking', $data); ---------------------------------------------------------------------------------- // Вариант 2. Через xPDO. <?php $modx->addPackage('onebooking', MODX_CORE_PATH . 'components/onebooking/model/'); $data = array(); if ($booking = $modx->getObject('oneBookingReserved', intval($_GET['bid']))) { $data = $booking->toArray(); $data['object_name'] = $booking->Object->name; } $data['back'] = $modx->makeUrl($_GET['back']); return $modx->getChunk('successBooking', $data);
В этом сниппете вызывается чанк successBooking
. Содержимое чанка может быть таким:
<h3>Ваша заявка принята!</h3> Данные заявки: <p>Номер заявки: [[+id]]</p> <p>Объект: <u>[[+object_name]]</u></p> <p>Количество: <u>[[+number]]</u></p> <p>Дата заезда: <u>[[+start_date]]</u></p> <p>Дата выезда: <u>[[+end_date]]</u></p> <p>Сумма: [[+sum]]</p> <br /> <a href="[[+back]]">Вернуться на страницу бронирования</a>
Для знатоков MODX не составит труда сделать такое самим.
П.С. Не успел включить в эту версию события MODX. Нужно было срочно выпустить исправление ошибки с пользовательскими полями. Так что в ближайшее время появится новая версия, в которой можно будет использовать плагины.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()