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

    13 июля 2016, 10:21   824     0

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

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

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