Имея в распоряжении медицинский портал, озадачился созданием столь популярного ныне сервиса "Запись на прием к врачу" - данный сервис очень легко приурочить для других видов "онлайн-заказов", хотя, сразу оговорюсь, что примеры ниже будут именно по записи к доктору (и, кстати, по 6 версии Друпала). По сути сервис представляет собой ни что иное как обычная отправка данных юзера по e-mail с последующим звонком юзеру - непосредственно запись (читай "бронирование" во всех его смыслах) происходит уже после обговора врача с клиентом.
Суть сервиса проста: посетитель Вашего портала (именно портала, т.к. речь пойдет о каталоге организаций) подбирает себе компанию по критерию, переходит к форме записи, отправляет ее на предустановленный (админом или тем, кто редактирует ноду организации) эл. адрес - со стороны представителя организации требуется лишь указать e-mail адрес для получения писем с формой записи.
Требуемые модули:
- Views
- CCK (только для 6-ки)
- Webform
- E-mail field
- Link
Модули по вкусу:
Урок для начинающих (ни капли кода), но уже имеющих навыки работы с вышеуказанными модулями.
Итак, весь процесс делим на 3 этапа (с учетом того, что тип(ы) материала каталога уже созданы:
1. Для того, чтобы иметь возможность отправлять форму на адрес соответствующей организации, нам нужны 2 дополнительных поля в нашем типе материала.
1.1. Создаем поле типа E-mail - машинное имя поля в качестве примера мы возьмем "doctor_reservation_email"; настройки поля по желанию, кроме одной: число значений (Number of Values) не меняем - оставляем "1" (также рекомендую указать в справке, что этот адрес используется для отправки формы записи на прием).
1.2. Создаем поле типа Link - настройки поля:
- Значение по умолчанию: Заголовок: "Записаться на приём"; URL: "reservation?value=[field_doctor_reservation_email-raw]"
- Number of Values: 1
- Ссылка заголовка: Необязательный заголовок
- Разрешить пользовательские маркеры: ставим галочку
- Атрибут Rel: nofollow (если не нужно, чтобы индексировалась страница формы)
Далее переходим к настройкам отображения и скрываем оба наших поля.
2. Создаем вебформу.
Url-алиас нашей формы необходимо указать такой: reservation
Из компонентов перво-наперво добавляем компонент типа "E-mail" - настройки компонента:
- Значение по умолчанию: %get[value]
- Label display: нет
- Выключено: ставим галочку
Далее добавляем остальные компоненты, которые мы хотим видеть в форме записи. Особо отмечу, что для того, чтобы человек мог записаться на определенную дату и время, вроде бы нужен модуль Date (не помню точно, он ли реализует поп-ап календарь (возможно, JQ Update), но сносить, чтобы проверить, не стал).
Затем переходим на вкладку "Электронные адреса" и выбираем радиобаттон "Значение компонента: Наш_компонент_с_эл._адресом"
Теперь на странице просмотра вебформы мы можем увидеть поле E-mail адреса - по-хорошему его нужно скрыть, но вот как сделать это лучше, чем параметром UPD (спасибо Андрею (см. комменты ниже)): поэтому в настройках скрываем этот компонент чекбоксом "Личное"/display: none
, я не нашел
3. Создаем представление, где добавляем обязательно фильтр по полю созданного нами поля "doctor_reservation_email", а оператором указываем "Не пусто" (Is not empty), далее добавляем нужные нам раскрытые фильтры для удобного поиска компаний.
Затем добавляем созданное в п.1 нами поле типа ссылка, настраиваем его, как удобно и добавляем остальные поля.
Вот и все! Теперь на странице созданного нами представления Ваши посетители смогут подобрать себе организацию по вкусу, затем у понравившейся организации жмакнуть ссылку "Записаться на приём", перейдя таким образом на страницу нашей вебформы, где автоматически подставится электронный адрес, указанный при редактировании данной организации.
Пример такого сервиса можно посмотреть здесь (страничка будет постоянно меняться - вероятнее всего, пока там не будет ни одной компании).
Возможно я что-то пропустил, так что заранее прошу прощения!
Друпал воистину всемогущ!
Комментарии
Вопросы:
1. Пользователь А записался на 14.00. После приходит пользователь Б, записывается на 14.00. Каким образом будет разруливатся ситуация?
2. Заходит пользователь-Редиска, который тупо забивает очередь собой или клонами. Как будете бороться?
3. Пользователь ошибся, введя данные в вебформу или, допустим, не сможет придти по какой-нибудь причине. Сможет ли он отменить свой "заказ"?
4. У врача изменилось время приема/он заболел/форс-мажор. Кто и как будет уведомлять уже записавшихся на выпадающее время?
почитал, не понял. буду читать позже
Не асилил, букаф много. но в закладки, пригодитсо когдат.
Айдар, спасиб за поделилсо опытом)
1. Телефонным разговором.
2. Никак.
3. Телефонным разговором.
4. Телефонным разговором.
Т.е. разумеется, что форма не бронирует время врача, а просто преднастроенно отсылает уведомление о поступлении "заказа". Таким образом уже третий год работаю с аналогичным сервисом по туризму (причем, участники, кому приходят "заказы" платят за это деньги), и понял, что уведомление по эл. почте - самое то.
А, ну понятно, фактически получается услуга "Мы вам перезвоним." Если клиентов такое решение устраивает - почему бы и нет?
Вот этого пока не знаю - маркетингом этого дела не занимался. Но
А тут еще и бесплатно.
Хотя, пожалуй, если б был прогером и смог предотвратить все 4 пункта, доделал бы.
каким образом? требуя скан паспорта и морду в вебкамеру?
Асилил. Понравилось.
Включить чекбокс "Личное"
насчет времени записи - встречал модуль для уберкарта, позволяющий пользователю выбирать время доставки из предлагаемых таймслотов, при этом учитывается максимальное кол-во заказов, доступных к доставке на это время, и в случае его превышения, таймслот становится недоступным
можно было бы воспроизвести что-то подобное для вебформы, но имхо не стоит оно того - достаточно дать возможность пользователю выбрать желаемый промежуток времени (первая/вторая половина дня или 8-10/10-12/12-14/... часов), а администратор уже согласует более точное время приёма, исходя из загруженности специалиста (с учетом посетителей из оффлайна) - собственно, то что предлагает Айдар.
Это да! Опять таки, сравнивая с тем, что уже реализовано, были злые кадры, которые вписывали в кач-ве контактных данных телефоны конкурентов.
И правда! Спасибо!
Я тоже работал и подумал, что, создавая сложности себе, мы на самом деле создаем сложности и оператору/приемщику таких "заказов" - все очень гибко и неструктуризировано, чтобы можно было сделать общую систему, по меньшей мере, в медицине и туризме. Так, если даже делать занятым какое-то время, если форму на данное время уже заполняли, то еще не факт, что в это же время другого пациента не сможет принять другой специалист.
А потому и решил, что проще просто отдавать клиента "сырым и необработанным".