Клиенту требовалось создать на сайте закрытый раздел с технической документацией по препаратам. Раздел должен был быть доступен по отдельной ссылке и закрыт от публичного доступа, чтобы документы могли получать только авторизованные пользователи с подтверждёнными правами.
До разработки функционала документы приходилось передавать вручную: пользователи запрашивали сертификаты, декларации, паспорта безопасности и другие материалы у сотрудников клиента, после чего менеджеры искали нужные файлы и отправляли их отдельно. Такой процесс занимал время, создавал повторные обращения и повышал риск отправки неактуальных документов.
Клиент хотел получить удобный интерфейс, похожий на структуру файлового хранилища: пользователь заходит на страницу, видит список препаратов, выбирает нужный препарат или несколько препаратов и скачивает документы архивом.
Создать закрытую страницу на сайте, где пользователи смогут самостоятельно получать актуальные документы по препаратам без участия менеджеров.
Раздел предназначен для авторизованных пользователей, которым клиент предоставляет доступ к технической документации. В первую очередь это партнёры, субподрядчики или покупатели, которым нужно получать актуальные документы по препаратам.
Пользователь получает доступ после авторизации на сайте. Если пользователь не авторизован, вместо списка документов отображается форма входа. Если пользователь авторизован, но не входит в разрешённую группу, он видит сообщение о запрете доступа.
Для проекта настроена проверка доступа по группе пользователей: работать с разделом могут администраторы и пользователи группы №7.
Раздел реализован на странице:
/docs/
На странице выводится список препаратов. Для каждого препарата доступны действия:
В верхней части страницы размещены массовые действия:
Кнопка скачивания выбранных препаратов изначально скрыта. Когда пользователь отмечает хотя бы один препарат, кнопка общего архива скрывается, а вместо неё появляется кнопка скачивания выбранных препаратов.
Документы хранятся в свойствах элементов инфоблока. Каждый препарат является отдельным элементом, а документы привязываются к нему через файловое свойство DOCS.
Для одного препарата может быть загружен один или несколько документов. Количество файлов не ограничивается логикой интерфейса: клиент может добавлять, заменять и обновлять документы через административную панель сайта.
Пользователь может работать с документами несколькими способами:
При формировании архива документы автоматически раскладываются по папкам с названиями препаратов. Это позволяет сохранить понятную структуру и быстро найти нужные материалы после скачивания.
Чтобы не перегружать страницу, список файлов по каждому препарату не выводится сразу при загрузке. Документы подгружаются AJAX-запросом только после клика на кнопку «Выбрать документы».
В модальном окне пользователь видит список файлов выбранного препарата. Если документов несколько, рядом с каждым отображается чекбокс. Пользователь может отметить только нужные документы и скачать их архивом через кнопку «Скачать выбранные».
Если у препарата только один документ, кнопка «Скачать выбранные» не выводится, так как выбор не требуется. В этом случае пользователь может скачать файл напрямую через кнопку «Скачать документ».
Для удобной работы с большим количеством документов реализован выбор препаратов через чекбоксы.
Если пользователь не выбрал ни одного препарата, ему доступна кнопка «Скачать документы на все препараты одним архивом». При нажатии система формирует ZIP-архив со всеми документами по всем препаратам.
Если пользователь выбирает один или несколько препаратов, кнопка общего архива скрывается и появляется кнопка «Скачать документы выбранных препаратов ZIP». В этом случае в архив попадают только документы отмеченных препаратов.
Внутри архива документы группируются по папкам:
Общий архив.zip
Препарат 1/
документ 1.pdf
документ 2.docx
Препарат 2/
декларация.pdf
паспорт безопасности.pdf
Чтобы предупредить пользователя о возможной длительной загрузке, добавлено модальное предупреждение.
Когда пользователь выбирает 10-й препарат, появляется сообщение о том, что формирование и скачивание архива может занять много времени. В модальном окне доступны две кнопки:
Предупреждение повторяется при выборе 20-го, 30-го, 40-го препарата и далее каждые 10 выбранных позиций. Логика учитывает текущее количество выбранных чекбоксов при каждом изменении: если пользователь снял часть отметок, а затем снова дошёл до порогового значения, предупреждение появится повторно.
Раздел реализован на сайте под управлением 1С-Битрикс. Для вывода списка препаратов используется компонент bitrix:news.list.
В целях оптимизации файловое свойство DOCS не загружается сразу для всех элементов списка. На странице может быть до 1000 препаратов, поэтому предварительная загрузка всех документов могла бы замедлять работу раздела. Вместо этого реализована ленивая AJAX-загрузка: список документов конкретного препарата запрашивается только при открытии модального окна.
Для проекта разработаны отдельные серверные обработчики:
ZIP-архивы формируются стандартными средствами PHP без сторонних библиотек. Временные архивы создаются в каталоге /docs/zipfile и удаляются после скачивания, чтобы не занимать место на сервере.
Раздел закрыт от неавторизованных пользователей. Доступ к странице и ко всем AJAX-обработчикам проверяется отдельно.
Перед просмотром или скачиванием документов система проверяет:
Прямые ссылки на файлы из /upload/iblock/ не используются для скачивания. Одиночные документы отдаются через защищённый PHP-обработчик /docs/download_file.php. Это позволяет не открывать документы публично и исключить скачивание файла без проверки прав.
Даже если пользователь узнает технический ID файла, он не сможет скачать его через обработчик, если этот файл не привязан к выбранному препарату в свойстве DOCS.
Так как раздел может содержать большое количество препаратов и документов, особое внимание было уделено скорости загрузки страницы.
Такой подход позволяет сохранить быструю загрузку основной страницы и при этом поддерживать работу с большим объёмом файлов.
Сотрудники клиента могут управлять документами через административную панель сайта. Документы привязаны к конкретным препаратам через файловое свойство элемента инфоблока.
При необходимости можно заменить один устаревший файл, не изменяя остальные документы препарата. Это важно для сертификатов и деклараций с ограниченным сроком действия: если один документ обновился, администратор заменяет только его, а остальные материалы остаются на месте.
Участие программиста для стандартного добавления или замены документов не требуется.
Клиент получил закрытый раздел для самостоятельного распространения технической документации. Пользователи могут получать нужные документы в любое время без обращения к менеджерам.
Что изменилось после внедрения:
Функционал решил исходную бизнес-задачу: упростил передачу документов партнёрам и клиентам, сократил ручные операции и повысил контроль над доступом к технической документации.
В дальнейшем раздел можно расширить дополнительными возможностями: