• Блог
  • [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. Нужно было срочно выпустить исправление ошибки с пользовательскими полями. Так что в ближайшее время появится новая версия, в которой можно будет использовать плагины.

0   2390

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.