• статья
  • pantey

Система бронирования столиков для Drupal 7. Модуль reserv

21.07.2014

Drupal может использоваться не только как платформа для разработки сайтов, но и как средство для создания веб приложений, благо API Drupal это позволяет, а на чем может споткнуться, то на помощь ему могут прийти сторонние модули, как Entity, Ctools, Views и ряд других.

Сейчас я хочу вам отдать в распоряжение свой модуль Reserv, который сочетает в себе не самые сложные конфигурации API Drupal в связке Entity. Из названия статьи вы уже поняли, для чего этот модуль служит и больше он подходит для кафе и ресторанов, но ни что не мешает вам его переписать (дописать) под свои нужды.

Теперь, немного распишу о функционале. Основное назначение – это организация системы бронирования столов на вашем сайте, с системой статусов, страницей администрирования заказов, смс уведомлений о новом забронированном столике и многое другое.

Весь список возможностей модуля:

  • Возможность добавлять практически неограниченного числа столиков (на данный момент ограничен лишь 20)
  • Возможность выбора изображения и количество мест для стола
  • Система статуса брони. Данная система необходима при бронировании столика. После заказа стола пользователем – данный стол становится недоступным для заказ на данное время и дату
  • Система администрирования поступивших заказов на бронирование столов, где вы можете менять данные пользователя забронировавшего столик, а так же менять статус брони или удалять бронь, а так же организовывать поиск по ID брони
  • Email уведомления о новом забронированном столике, как администратору сайта, так и пользователю. Имеется поддержка токенов. В качестве токенов выступают все используемые входные данные для бронирования столов
  • Email уведомление пользователю, после подтверждения статуса
  • СМС уведомление администратору, о новом забронированном столике . В тексте СМС приходит ID заказа, номер телефона и имя забронировавшего столик

Теперь расскажу как с данным модулем работать, и что для чего нужно

Установка

С установкой у вас проблем не должно возникнуть, он лишь имеет ряд зависимостей:

Так же, как и все сторонние модули Drupal - копируете папку с модулем по пути sites/all/modules и далее активируете его на странице «Модули».

Добавление столов

После активации модуля переходим по пути «Структура -> Столы -> Добавить столы», где вам будет доступна форма создания стола, где вам необходимо

  • выбрать номер стола
  • указать количество мест за столом
  • изображение стола
Форма добавления стола

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

Страница бронирования столов пользователями

Также после активации модуля вам станет доступна страница для бронирования столов пользователями

  1. sitename/reservation

Пункт в меню будет доступен в меню «Навигация». На данной странице будут доступны все созданные вами столы для заказа. Где пользователю необходимо будет выбрать дату и время желаемого заказ и далее выбрать понравившейся ему стол.

Страница бронирования столов

Если же на выбранное дату и время какой-то стол будет уже заказан, то для стола будет статус «Забронирован» и он будет не доступен для заказа.

Стол забронирован и недоступен для заказа

Бронирование стола пользователем

После выбора даты, времени и желаемого столика, пользователю будет показано модальное окно с формой бронирования, где ему необходимо заполнить поля:

  • Имя и Фамилия
  • Email
  • Номер телефона
  • Количество человек
Форма бронирования стола

После заполнения всех полей, пользователю будет показано сообщение, где ему будет указана вся необходимая информация о его заказе, такие как:

  • Уникальный номер заявки
  • Дата и время
Сообщение пользователю о забронированном столике

Хочу заметить, что в форме для указания номера телефона используется плагин jquery – masked input, сам плагин уже находится в модуле, поэтому возможны конфликты, если вы уже используете отдельный модуль для Drupal - masked_input.

Email уведомления

Далее, после совершения заказа, пользователю и администратору приходят письма о новом заказе на бронировании столика. Текст email писем указываются в настройках модулях.

СМС сообщения

При необходимости вы можете отправлять СМС сообщения администратору сайта о новом забронированном столике. В качестве текста СМС будет указан ID заказа, номер телефона и Имя и Фамилия пользователя. Для отправки СМС используется сервис sms.ru. Как настроить отправку СМС, читайте в разделе – настройки модуля.

Настройки модуля

Страница с настройками модуля доступна по адресу:

  1. sitename/admin/config/content/reserv/settings
Настройки модуля

Как вы видите настройки модуля поделены на 3 раздела:

  • Настройка Email оповещений
  • Другие настройки
  • Настройки СМС оповещения

В разделе «Настройка Email оповещений» вы можете указать текст, который будет отправлен пользователю или администратору сайта, после бронирования столика.

Настройка email уведомлений для администратора

Для настроек доступны следующие параметры:

  • Текст сообщения
  • Включить / отключить отправку email

Так же доступны токены:

  • [reserv:id-res] - номер заявки
  • [reserv:name] - на чье имя забронировано
  • [reserv:email] - email пользователя
  • [reserv:date] - на какую дату забронировано
  • [reserv:time] - на какое время забронирован столик
  • [reserv:id-table] - номер столика
  • [reserv:count] - количество человек
  • [reserv:phone] - номер телефона

В разделе «Другие настройки», доступно:

  • Включить / отключить отправку email после подтверждения статуса заказа

В разделе «Настройки СМС оповещения» вам доступны следующие настройки:

  • Номер телефона
  • Api_id – обязательное поле для отправки СМС сообщений
  • Включить / отключить отправку СМС оповещений
Настройка СМС сообщений

Для того, что бы отправлять СМС сообщения вам необходимо зарегистрироваться на сайте http://reserv.sms.ru, где после регистрации вы получите свой Api_id. Данный сайт был организован по партнерской программе, в следствии чего вы получаете скидку на отправку СМС примерно в 10%. Вы можете не использовать данный сайт для регистрации, но как это отразится на отправке СМС не знаю, ибо не тестил.

Администрирование забронированных столов

Все заказы на бронирование столов находятся по адресу:

  1. sitename/admin/config/content/reserve
Списки забронированных столов

На данной странице вы так же можете:

  • Отсортировать по статусу заказ
  • Найти заказ в БД по его ID
  • Изменить информацию заказа

Темизация

Как ранее было сказано, данный модуль создает страницу с url:

  1. sitename/reservation

Так что для перекрытия страницы, вам необходимо использовать стандартную конструкцию Drupal, для переопределения страницы:

  1. page—reservation.tpl.php

Тем самым вы сможете определить необходимые вам регионы или вывести какую-то дополнительную информацию. Так же есть внутренний шаблон модуля:

  1. reserv.tpl.php

Который, внутри себя имеет лишь 3 переменные:

  • $form_d - отрендеренная форма с сортировкой по дате и времени
  • $form_o - отрендеренная форма для бронирования столика
  • $res_node - вывод всех столов (многомерный массив)

Используя эти переменные вы сможете вывести и оттемизировать например форму с сортировкой даты и времени.

Используя массив $res_node, вы сможете вывести необходимый вам стол в любом месте на странице.

Для использования шаблона, вам необходимо скопировать файл

  1. reserv.tpl.php

в папку с вашей темой и не забудьте после этого почистить кеш сайта. Сам файл находится внутри модуля.

Вот вроде и все возможности модуля, данный модуль жестко не тестировался, так что просьба о всех найденных багах писать в комментариях или на email.

Скачать модуль reserv можно здесь (reserv.dev-1.0.zip)

P.S. Гуру оформления кода по феншую Drupal, - просьба особо не матерится. В следующей версии исправлю на 2 пробела.

-->
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

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

Profile picture for user 1541
DeN
23.07.2014

Like!

Profile picture for user 1541
Николай
26.07.2014

Красавчик, полезный модуль!

Profile picture for user 1541
aleksei
01.08.2014

Ты крут.

Profile picture for user 1541
Вадим
03.08.2014

отличный модуль! супер!

заметил одну вещь: после активации модуля название сайта меняется на "Array" в заголовке страниц сайта. Установлены Domain Access и Metatag (из того, что влияет на название сайта). приложил скрин. сайт на локале

скрин

Profile picture for user pantey
pantey
04.08.2014

какую тему используете?

Profile picture for user 1541
Яр
22.10.2014

Ну что как вышел из положения, у меня такая же фигня

Profile picture for user 1541
Яр
22.10.2014

короче модуль Метатег влияет

Profile picture for user 1541
Альберт
12.09.2014

Огооо! Автор, ты нереально крутой человечище! Скоро займусь этой темой, очень интересно и актуально.

Profile picture for user 1541
Влад
14.09.2014

Здравствуйте!
Модуль крутой, очень полезный, но почему не выводит записи, которые начинаются со следующего месяца (это я экспериментально проверил)? В БД заносятся, но в админке не отображаются. Где копать, что менять?Подскажите пожалуйста.

Profile picture for user 1541
Влад
14.09.2014

Кстати, "Поиск по ID брони" выводит эти записи, хоть они и не видны на станице со списками ( /admin/config/content/reserv ).

Profile picture for user pantey
pantey
14.09.2014

Первоначально это не было предусмотрено. Будет время, напишу фильтр, который будет выводить заказы по периодам указанных дат.

Profile picture for user 1541
Алексей
15.09.2014

В первую очередь хотелось бы поблагодарить за прекрасный модуль. Для меня это самое подходящее решение.

Павел, а подскажите пожалуйста как сделать вывод столиков в странице бронирования на целый день без условий по времени? (точнее как правильно дописать в модуле такую функцию) Чтобы можно было сразу увидеть и выбрать время столика без перезагрузки страницы.

хочу добиться примерно такого результата: (немного в ФШ наваял)

Profile picture for user 1541
Алексей
16.09.2014

Прошу прощения, картинка пропала.
reserv
Можно ли будет реализовать его в таком виде?

Profile picture for user pantey
pantey
16.09.2014

Реализовать то можно, только я врядли это буду делать - это ложится на ваши плечи. Возможно для ваших целей подойдёт этот модуль

Profile picture for user 1541
Алексей
16.09.2014

Спасибо за ответ! Да как раз сегодня на него вышел - пока разбираюсь.

но ваш модуль тоже очень крут, жаль только в программировании я ещё не силён - так бы докрутил.

Profile picture for user 1541
Альберт
18.09.2014

а жалко! хорошая идея между прочим, более интуитивная.

Profile picture for user 1541
Алексей
19.11.2014

Подскажите как можно увеличить количество столов?

Profile picture for user pantey
pantey
19.11.2014

в файле reserv.module найдите функцию reserv_form() и в массив $option - допишите необходимое количество.

Profile picture for user 1541
Алексей
19.11.2014

Спасибо ))

Profile picture for user 1541
Иван
22.11.2014

Добрый вечер, а можно ли на одном сайте для нескольких ресторанов этот мод использовать, к каждому ресторану своя форма с бронированием?

Profile picture for user pantey
pantey
22.11.2014

Скорее нет, структура модуля не подходит для нескольких ресторанов.

Profile picture for user 1541
Иван
22.11.2014

Очень жаль, не хватает категорий ещё, обычно в ресторанах ещё несколько залов. добавить бы категории и можно было бы хоть к ресторанам хоть к разным залам прикручивать.

Profile picture for user 1541
Иван
18.12.2014

А вот такой вопрос еще... А как сделать, чтобы была такая структура:
Ресторан 1 этаж - список столов
Ресторан 2 этаж - список столов
Ресторан в подвале - список столов
?
Буду признателен за ответ.
Спасибо.

Profile picture for user 1541
Дима
23.02.2015

Модуль отличный! Жаль не хватает знаний его переделать для салона красоты( Вместо столов сделать мастеров понятно как, время работы поменять тоже просто. А проблема вот в чем - мастер не каждый день работает, как настроить так, чтобы был полностью неактивный день?

Profile picture for user 1541
Андрей_G
13.05.2015

Отличный модуль, если-б была возможность привязать определённый стол к определённому термину токсономии чтоб можно было отсортировать столы, цены-б ему не было...
И ещё вопрос, к примеру есть стол на 10 персон, 3 из 10 забронировали, осталось 7 свободных мест, но эти 7 мест уже для брони будут не доступны?

Profile picture for user 1541
Кристина
19.05.2018

Здравствуйте! 

А для Drupal 8 есть ваш прекрасный модуль?