Модуль для решения Персональный сайт врача (vit.doctor). Добавляет в админку Bitrix настройку рабочей недели врача: рабочие дни и время начала/окончания работы.
- Хранение: таблица БД
b_vit_doctor_schedule— одна строка на день недели на врача (DOCTOR_ID,WEEKDAY,IS_WORKING,TIME_FROM,TIME_TO). Уникальный ключ(DOCTOR_ID, WEEKDAY). - Доступ к данным: D7 Entity
ScheduleTableи сервисScheduleс методамиgetWeekSchedule($doctorId)иsaveWeekSchedule($data, $doctorId). Для одного врача используетсяDOCTOR_ID = 0. - Админка: страница в
bitrix/admin/(форма по 7 дням), при сохранении вызываетSchedule::saveWeekSchedule(); при открытии —Schedule::getWeekSchedule(0). - Установка/снятие: при установке создаётся таблица (
install/db/mysql/install.sql) и заполняется шаблон Пн–Пт 09:00–18:00; при удалении модуля таблица удаляется (uninstall.sql).
Подробнее — в разделе «Архитектура хранения и управления расписанием» ниже.
- 1С-Битрикс: Управление сайтом
- PHP 7.4+
-
Скопируйте папку
vit.doctor.scheduleв каталог модулей:- local/modules/vit.doctor.schedule (предпочтительно)
- либо bitrix/modules/vit.doctor.schedule
-
В админке Bitrix: Настройки → Настройки продукта → Модули — найдите «Расписание врача (vit.doctor)» и нажмите Установить.
-
После установки откройте страницу настройки расписания:
На странице настройки задаётся для каждого дня недели:
- Рабочий день — включён/выключен (например, среда — выходной).
- Время начала и время окончания работы (например, 09:00–18:00).
Пример: понедельник и вторник 09:00–18:00, среда выходной, четверг и пятница 09:00–18:00, суббота и воскресенье выходные.
Данные сохраняются по кнопке Сохранить.
Расписание доступно через класс \Vit\DoctorSchedule\Schedule:
use Vit\DoctorSchedule\Schedule;
// Получить расписание на неделю (doctorId = 0 — по умолчанию)
$schedule = Schedule::getWeekSchedule(0);
// $schedule['MON'] = ['is_working' => 'Y', 'from' => '09:00', 'to' => '18:00']
// $schedule['WED'] = ['is_working' => 'N', 'from' => '09:00', 'to' => '18:00']
// ...По этому массиву можно строить доступные слоты для записи (например, разбивать интервал from–to на 30-минутные окна и отдавать на фронт).
Расписание хранится в отдельной таблице БД b_vit_doctor_schedule, а не в опциях модуля или JSON-файле.
Почему таблица:
- Нормализованное хранение — одна строка = один день недели для одного врача. Поля:
DOCTOR_ID,WEEKDAY(MON–SUN),IS_WORKING,TIME_FROM,TIME_TO. Уникальный ключ(DOCTOR_ID, WEEKDAY)исключает дубли и упрощает обновление. - Масштабирование по врачам — один и тот же формат для любого числа врачей:
getWeekSchedule($doctorId)иsaveWeekSchedule($data, $doctorId). Для «одного врача» используетсяDOCTOR_ID = 0. - Привычная модель для Bitrix — таблица создаётся при установке модуля (
install/db/mysql/install.sql), удаляется при снятии (uninstall.sql). Доступ через D7 Entity (ScheduleTable) и сервисный классSchedule. - Расширяемость — позже можно добавить, например, таблицу исключений (отпуск, праздники) с привязкой по
DOCTOR_IDи дате, не меняя структуру недельного шаблона.
| Поле | Тип | Описание |
|---|---|---|
| ID | INT, PK | Автоинкремент |
| DOCTOR_ID | INT, default 0 | Идентификатор врача (0 — расписание по умолчанию) |
| WEEKDAY | CHAR(3) | День недели: MON, TUE, …, SUN |
| IS_WORKING | CHAR(1) | Y / N |
| TIME_FROM | VARCHAR(5) | Начало, например 09:00 |
| TIME_TO | VARCHAR(5) | Конец, например 18:00 |
Уникальный ключ: (DOCTOR_ID, WEEKDAY).
- Чтение:
Schedule::getWeekSchedule($doctorId)возвращает массив по дням с ключамиis_working,from,to. - Запись:
Schedule::saveWeekSchedule($data, $doctorId)принимает массив по дням (как из формы админки) и для каждого дня делает upsert в таблицу. - Админка вызывает эти методы с
$doctorId = 0; при необходимости выбора врача в интерфейс можно добавить селектор и передавать выбранный ID.
Модуль не подменяет форму записи в vit.doctor. В компоненте или обработчике записи достаточно вызвать Schedule::getWeekSchedule(0), по этому массиву сформировать доступные слоты (например, разбить интервалы по 30 минут) и подставить в существующую вёрстку.