Электронная очередь/приемная на DLE своими руками.

Электронная/очередь приемная на базе DLEЭлектронная приемная/очередь на базе DLE. Разрабатывалась очередь для записи на прием к специалисту(врач, юрист, т.д.) обычного гражданина прошедшего регистрацию на сайте.

Требования к электронной очереди

1. Отображение расписания в виде 5-7 дней, пропуская выходные дни (субботу, воскресенье).
2. Показ в расписании количество свободных временных зон, для каждого дня приема (т.е. количество ячеек для записи на каждую дату в расписании).
3. Если человек уже записался, то при переходе в расписание выводить уведомление, о том на какую дату он записался и на какое время.
Если человек записался ошибочно он может аннулировать запись.
4. Граждане указывают ФИО, дату рождения и вопрос по которому они хотят обратиться к своему специалисту.
5. Создать ссылку на просмотр своей очереди для гражданина в профиле пользователя.
6. Создать ссылку на просмотр очереди для администратора/специалиста (отчет).

Подготовка движка DLE

1. Создаем категорию для записей «Категория для записи«.

В данную категорию будут добавляться новости, каждая новость это запись на прием к специалисту. Один пользователь может оставить только одну запись.

2.Разрешаем исполнение PHP кода в шаблоне DLE

Для этого в файле index.php меняем это:

[php] echo $tpl->result[‘main’];
[/php]

на это:

[php] eval (‘ ?’ . ‘>’ . $tpl->result[‘main’] . ‘<' . '?php '); [/php]

3. Создаем файл конфигурацией «config.php«

Файл «config.php» создаем в корне сайта, служит он для подключения к БД внутри нашего шаблона.
Вот его примерное содержание:

[php]
[/php]

Потом мы будем используя переменную $db1 получать доступ к базе.

3. Создаем дополнительные поля для категории и профиля пользователя.

Для категории «Категория для записи» созданы 4 дополнительных поля:

— time (тип поля:Список) Для хранения времени на которое человек записался.
— fio (тип поля:Одна строка) Для хранения ФИО человека. Т.к. прием вдется по записи, специалист сам будет вызывать гражданина на прием.
По этому пользователь будет заинтересован указать верные данные.
— dr (тип поля:Одна строка) Дата рождения пользователя.
— vopros (тип поля:Список) Список вопросов по которым пользователь может записаться. Это нужно для того чтобы специалист уже знал с каким вопросом к нему придет гражданин.
Он заранее подготовит информацию и документы для приема, что сократит время приема.

Для профиля пользователя созданы 4 дополнительных поля:

Думаю описывать их не стоит.
— familiya (тип поля:Одна строка) Фамилия
— imya (тип поля:Одна строка) Имя
— otchestvo (тип поля:Одна строка) Отчество
— datadr (тип поля:Одна строка) Дата рождения

4. Меняем стандартный вывод сообщений DLE.

После добавления новости/записи DLE выводит:
Новость добавлена.
Ваша статья была успешно добавлена в базу данных. Добавить еще или Вернуться назад.

Данный вывод нас не устраивает.
Меняем его в файле website.lng он находиться в папке: www\language\Russian\
Вот пример как можно изменить вывода текста:
Меняем:

[php] ‘add_ok_1’ => «Ваша статья была успешно добавлена в базу данных.»,
[/php]

на:

[php] ‘add_ok_1’ => «Ваши данные успешно добавлены в базу данных.»,
[/php]

Текст «Добавить еще или Вернуться назад.» меняется в addnews.php.
Меняем

[php] if( $config[‘allow_alt_url’] == «yes» ) msgbox( $lang[‘add_ok’], «{$msg} $lang[add_noch] $lang[add_or] $lang[all_prev]» );
else msgbox( $lang[‘add_ok’], «{$msg} $lang[add_noch] $lang[add_or] $lang[all_prev]» );
[/php]

на

[php] msgbox( ‘Спасибо.’, «{$msg} $lang[all_prev]» );
[/php]

В итоге после добавления новости/записи получаем сообщение:
Спасибо.
Ваши данные успешно добавлены в базу данных. Вернуться назад

5. Меняем профиль пользователя.

В место имени которое вверху, надо вывести ФИО и дату рождения.
Все данные находятся в доп. полях {xfields}.
Переносим тег {xfields} наверх в файле userinfo.tpl.
А само поле имя скрываем чтобы не вводить пользователя в заблуждение.

[html]
[/html]

6. При регистрации пользователя выводим поля ФИО в самом верху.

Делается аналогично как и с профилем:
Переносим {xfields} в самое начало файла registration.tpl.

7. Строим расписание (самое сложное).

Расписание электронной приемной

Делается это в другой категории допустим «Расписание«.
Для нее создается путем копирования и переименования файл шаблона короткой новости(short-story).
Назовем его «ss_raspisanie.tpl«. В нем будет php код для создания расписания.
Добавляем новость в данную категорию. (текст новости любой).

Примерная схема изменения шаблона:
Убираем все ненужные теги в нем.
Можно сделать это вот так:
Подключаем в самом начале наш файл конфига.

[php]
[/php]

Строим массив дат на 7 дней вперед.
Далее узнаем текущий день с помощью PHP.
Потом строим расписание. Для этого перебираем массив дат и делаем запрос, где указываем в качестве условия имя автора поста и дату для выборки из поля TITLE.
— Имя берем из массива $member_id;
примерно так:

[php] $name_user=$member_id[‘name’];
[/php]

— Дату из ранее построенного массива дат например $date[0];

Если новости/посты/записи найдены то выводим их пользователю. (здесь вы можете сделать обработку для показа уже занятого времени/мест)
Дата при добавлении новости заносится в TITLE. Так проще делать выборку и перебирать новости/записи за какое либо число.

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

[php] $res = mysql_query(«select * from `».$database.»`.`».$db_pefix.»post` where `category`=\»».$id_(котегории для записей).»\» and `title`=\»».$date.»\» and `autor`=\»».$member_id[‘name’].»\»;»,$db1);
[/php]

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

Если на какой либо день есть свободное время, то подсвечиваем URL для добавления новости/записи. (В моем случаи это просто знак плюс).
URL будет вести на страницу добавления новости в DLE. addnews.tpl.
В месте с URL /index.php?do=addnews мы будем передавать еще ряд параметров.
1. Дату на которую пользователь пожелал записаться(она пойдет в заголовок title новой записи)
2. ID категории для записи. Так мы сможем вывести только ту категорию которая нам нужна, а не весь список доступных категорий, как это зачастую видно при добавлении новостей в DLE.
Вот примерный URL для добавлении записи в расписание:

[html] http://site.ru/index.php?do=addnews&data=12.12.2001&id_cat=4
[/html]

8. Меняем страницу добавления новости/записи addnews.tpl

Подключаем в самом начале наш файл конфига.

[php]
[/php]

Переданные ранее параметры принимаем через $_GET[‘variable’] или POST, кому как нравится.

Убираем галочки при добавлении новости(Разрешить комментарии, Публиковать на главной,Опубликовать на сайте без модерации,Разрешить рейтинг статьи,Зафиксировать на сайте) Они просто не нужны.
Для этого просто скройте данные чекбоксы используя CSS style=»display: none;».

[html]
    






[/html]

Для заполнения фамилии я использовал фунцию для выборки из поля xfields нужного мне значения. (она идет в виде бонуса к статье).
Как известно доп. поля имеют вид: field1|Value1||field2|Value2
Данная функция вынимает данные по имени поля.

Вот пример заполнения поля ФИО в форме добавления новости ADDNEWS.TPL

[html] Ваше Ф.И.О:
» id=»xfield[fio_invite]» name=»xfield[fio_invite]»> [/html]

9. Делаем ссылку на свою электронную очередь в профиле.

Открываете файл Login.tpl и меняете:

[html]
  • Добавить новость
  • [/html]

    на

    [html]
  • Моя Электронная очередь
  • [/html]

    Для отображения очереди пользователя, также создается категория в нее добавляется новость и назначается шаблон. В шаблоне в с помощью PHP,
    Вы вынимаете данные из базы и отображаете пользователю дату(Title/заголовок новости которую он добавил) и время на которое он записался.
    Примерно так:

    [php] $res = mysql_query(«select title,xfields from `».$database.»`.`».$db_pefix.»post` «,$db1);
    [/php]

    Показать можно так:

    [php] echo get_values_from_xfields(res[‘xfields’],»time»);
    [/php]

    10. Затем, если вам нужно анулировать какую либо запись.

    Создаете категорию в ней добавляете новость. И назначаете шаблон.
    В шаблоне используйте PHP код для удаления новостей для данного пользоваталя
    Примерный код для удаления публикаций:

    [php]
    [/php]

    не забыв добавить

    [php]
    [/php]

    в начале шаблона.

    11. Как построить отчет для админа.

    Просто создать еще одну категорию. Добавить туда новость любую. А в шаблоне вывода новости сделать обработку вывода данных.
    Например :

    [html] http://szserov.ru/index.php?newsid=222&othet=Day1
    [/html]

    Вот в принципе и все.

    От автора(acid)

    Пишу я это все для того, чтобы показать, что на движке DLE можно реализовать практичеки любую задачу.

    Пишите, на все вопросы отвечу и проконсультирую. К сожалению не весь програмный код могу выложить. Но обьяснить где и что изменить или взять, подскажу.

    Bonus: Это фунция для выборки значения поля по его имени.

    [php] function get_values_from_xfields($xfields,$xfield_name){
    $array_xfields=array(); //определем массив
    $array_x1=explode(«||»,$xfields); //режем поля на составные имя|знач||имя|знач
    for ( $i=0; $i<=count($array_x1); $i++){ $array_x2=explode("|",$array_x1[$i]); //режем внутренние данные полей $array_xfields[$array_x2[0]]="".$array_x2[1].""; //асоциативный массив для выборки из него нужного поля по его наименовнаию } //проверяем нашли мы или нет поле if (!empty($array_xfields[$xfield_name])){ return $array_xfields[$xfield_name]; //возвращаем значение поля } else{ return null; } } [/php] Реализовывайте и делитесь впечатлениями. Данная разработка внедрена на сайте УСЗН города Серова.

    PS:

    Обсудить данную разработку можно на моем форуме acid.name

    Заказ(покупка) электронной очереди

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

    Заказывайте, о цене всегда договоримся. Контакты есть верхнем в меню.

    С уважением ACID.

    26 комментариев

    Add a Comment

    Your email address will not be published. Required fields are marked *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.