Drupal может использоваться не только как платформа для разработки сайтов, но и как средство для создания веб приложений, благо API Drupal это позволяет, а на чем может споткнуться, то на помощь ему могут прийти сторонние модули, как Entity, Ctools, Views и ряд других.
Сейчас я хочу вам отдать в распоряжение свой модуль Reserv, который сочетает в себе не самые сложные конфигурации API Drupal в связке Entity. Из названия статьи вы уже поняли, для чего этот модуль служит и больше он подходит для кафе и ресторанов, но ни что не мешает вам его переписать (дописать) под свои нужды.
Теперь, немного распишу о функционале. Основное назначение – это организация системы бронирования столов на вашем сайте, с системой статусов, страницей администрирования заказов, смс уведомлений о новом забронированном столике и многое другое.
Весь список возможностей модуля:
- Возможность добавлять практически неограниченного числа столиков (на данный момент ограничен лишь 20)
- Возможность выбора изображения и количество мест для стола
- Система статуса брони. Данная система необходима при бронировании столика. После заказа стола пользователем – данный стол становится недоступным для заказ на данное время и дату
- Система администрирования поступивших заказов на бронирование столов, где вы можете менять данные пользователя забронировавшего столик, а так же менять статус брони или удалять бронь, а так же организовывать поиск по ID брони
- Email уведомления о новом забронированном столике, как администратору сайта, так и пользователю. Имеется поддержка токенов. В качестве токенов выступают все используемые входные данные для бронирования столов
- Email уведомление пользователю, после подтверждения статуса
- СМС уведомление администратору, о новом забронированном столике . В тексте СМС приходит ID заказа, номер телефона и имя забронировавшего столик
Теперь расскажу как с данным модулем работать, и что для чего нужно
Установка
С установкой у вас проблем не должно возникнуть, он лишь имеет ряд зависимостей:
Так же, как и все сторонние модули Drupal - копируете папку с модулем по пути sites/all/modules и далее активируете его на странице «Модули».
Добавление столов
После активации модуля переходим по пути «Структура -> Столы -> Добавить столы», где вам будет доступна форма создания стола, где вам необходимо
- выбрать номер стола
- указать количество мест за столом
- изображение стола
Хочу заметить, что при выборе номера стола, система автоматически определяет занятость номера стола, т.е. вы не можете создать два стола с одинаковым номером. Если номер стола уже будет числится в базе, то он просто не будет доступен для выбора.
Страница бронирования столов пользователями
Также после активации модуля вам станет доступна страница для бронирования столов пользователями
sitename/reservation
Пункт в меню будет доступен в меню «Навигация». На данной странице будут доступны все созданные вами столы для заказа. Где пользователю необходимо будет выбрать дату и время желаемого заказ и далее выбрать понравившейся ему стол.
Если же на выбранное дату и время какой-то стол будет уже заказан, то для стола будет статус «Забронирован» и он будет не доступен для заказа.
Бронирование стола пользователем
После выбора даты, времени и желаемого столика, пользователю будет показано модальное окно с формой бронирования, где ему необходимо заполнить поля:
- Имя и Фамилия
- Номер телефона
- Количество человек
После заполнения всех полей, пользователю будет показано сообщение, где ему будет указана вся необходимая информация о его заказе, такие как:
- Уникальный номер заявки
- Дата и время
Хочу заметить, что в форме для указания номера телефона используется плагин jquery – masked input, сам плагин уже находится в модуле, поэтому возможны конфликты, если вы уже используете отдельный модуль для Drupal - masked_input.
Email уведомления
Далее, после совершения заказа, пользователю и администратору приходят письма о новом заказе на бронировании столика. Текст email писем указываются в настройках модулях.
СМС сообщения
При необходимости вы можете отправлять СМС сообщения администратору сайта о новом забронированном столике. В качестве текста СМС будет указан ID заказа, номер телефона и Имя и Фамилия пользователя. Для отправки СМС используется сервис sms.ru. Как настроить отправку СМС, читайте в разделе – настройки модуля.
Настройки модуля
Страница с настройками модуля доступна по адресу:
sitename/admin/config/content/reserv/settings
Как вы видите настройки модуля поделены на 3 раздела:
- Настройка 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%. Вы можете не использовать данный сайт для регистрации, но как это отразится на отправке СМС не знаю, ибо не тестил.
Администрирование забронированных столов
Все заказы на бронирование столов находятся по адресу:
sitename/admin/config/content/reserve
На данной странице вы так же можете:
- Отсортировать по статусу заказ
- Найти заказ в БД по его ID
- Изменить информацию заказа
Темизация
Как ранее было сказано, данный модуль создает страницу с url:
sitename/reservation
Так что для перекрытия страницы, вам необходимо использовать стандартную конструкцию Drupal, для переопределения страницы:
page—reservation.tpl.php
Тем самым вы сможете определить необходимые вам регионы или вывести какую-то дополнительную информацию. Так же есть внутренний шаблон модуля:
reserv.tpl.php
Который, внутри себя имеет лишь 3 переменные:
- $form_d - отрендеренная форма с сортировкой по дате и времени
- $form_o - отрендеренная форма для бронирования столика
- $res_node - вывод всех столов (многомерный массив)
Используя эти переменные вы сможете вывести и оттемизировать например форму с сортировкой даты и времени.
Используя массив $res_node, вы сможете вывести необходимый вам стол в любом месте на странице.
Для использования шаблона, вам необходимо скопировать файл
reserv.tpl.php
в папку с вашей темой и не забудьте после этого почистить кеш сайта. Сам файл находится внутри модуля.
Вот вроде и все возможности модуля, данный модуль жестко не тестировался, так что просьба о всех найденных багах писать в комментариях или на email.
Скачать модуль reserv можно здесь (reserv.dev-1.0.zip)
P.S. Гуру оформления кода по феншую Drupal, - просьба особо не матерится. В следующей версии исправлю на 2 пробела.
Комментарии (26)
Like!
Красавчик, полезный модуль!
Ты крут.
отличный модуль! супер!
заметил одну вещь: после активации модуля название сайта меняется на "Array" в заголовке страниц сайта. Установлены Domain Access и Metatag (из того, что влияет на название сайта). приложил скрин. сайт на локале
какую тему используете?
Ну что как вышел из положения, у меня такая же фигня
короче модуль Метатег влияет
Огооо! Автор, ты нереально крутой человечище! Скоро займусь этой темой, очень интересно и актуально.
Здравствуйте!
Модуль крутой, очень полезный, но почему не выводит записи, которые начинаются со следующего месяца (это я экспериментально проверил)? В БД заносятся, но в админке не отображаются. Где копать, что менять?Подскажите пожалуйста.
Кстати, "Поиск по ID брони" выводит эти записи, хоть они и не видны на станице со списками ( /admin/config/content/reserv ).
Первоначально это не было предусмотрено. Будет время, напишу фильтр, который будет выводить заказы по периодам указанных дат.
В первую очередь хотелось бы поблагодарить за прекрасный модуль. Для меня это самое подходящее решение.
Павел, а подскажите пожалуйста как сделать вывод столиков в странице бронирования на целый день без условий по времени? (точнее как правильно дописать в модуле такую функцию) Чтобы можно было сразу увидеть и выбрать время столика без перезагрузки страницы.
хочу добиться примерно такого результата: (немного в ФШ наваял)
Прошу прощения, картинка пропала.
Можно ли будет реализовать его в таком виде?
Реализовать то можно, только я врядли это буду делать - это ложится на ваши плечи. Возможно для ваших целей подойдёт этот модуль
Спасибо за ответ! Да как раз сегодня на него вышел - пока разбираюсь.
но ваш модуль тоже очень крут, жаль только в программировании я ещё не силён - так бы докрутил.
а жалко! хорошая идея между прочим, более интуитивная.
Подскажите как можно увеличить количество столов?
в файле reserv.module найдите функцию reserv_form() и в массив $option - допишите необходимое количество.
Спасибо ))
Добрый вечер, а можно ли на одном сайте для нескольких ресторанов этот мод использовать, к каждому ресторану своя форма с бронированием?
Скорее нет, структура модуля не подходит для нескольких ресторанов.
Очень жаль, не хватает категорий ещё, обычно в ресторанах ещё несколько залов. добавить бы категории и можно было бы хоть к ресторанам хоть к разным залам прикручивать.
А вот такой вопрос еще... А как сделать, чтобы была такая структура:
Ресторан 1 этаж - список столов
Ресторан 2 этаж - список столов
Ресторан в подвале - список столов
?
Буду признателен за ответ.
Спасибо.
Модуль отличный! Жаль не хватает знаний его переделать для салона красоты( Вместо столов сделать мастеров понятно как, время работы поменять тоже просто. А проблема вот в чем - мастер не каждый день работает, как настроить так, чтобы был полностью неактивный день?
Отличный модуль, если-б была возможность привязать определённый стол к определённому термину токсономии чтоб можно было отсортировать столы, цены-б ему не было...
И ещё вопрос, к примеру есть стол на 10 персон, 3 из 10 забронировали, осталось 7 свободных мест, но эти 7 мест уже для брони будут не доступны?
Здравствуйте!
А для Drupal 8 есть ваш прекрасный модуль?