Почему OctoberCMS? Моя история
Наконец-то родил текст, который лежал в черновике 2 года.
Во время работы в НИИ примерно в 2015 году у меня появилась задача сделать систему учёта публикаций научных сотрудников нашего института. По заданию требовалось организовать:
- ведение (заполнение, модификация) нормативно-справочной информации;
- сбор данных о публикационной активности сотрудников института;
- автоматизированная проверка достоверности вводимых данных о публикационной активности;
- мониторинг научной деятельности и оперативная оценка ее эффективности;
- создание отчетов со сложной логикой расчётов;
Такого рода системы имеют аббривиатуру CRIS (Current Research Information Systems). Они близкы к библиотечным системам, поэтому вначале был сделан обзор такого рода систем. Несмотря на то, что подобного рода продуктов много, в открытом доступе ничего стоящего не нашлось.
Как показывает опыт, люди делают на том, на чём умеют, так как это самый быстрый способ достичь результата. К тому моменту у меня за плечами имелся с десяток сайтов на CMS Drupal 6,7,8 и Wordpress. Если выбирать среди этих 2 систем, то Drupal больше подходил для решения задчи, тем более с этой CMS я работал более плотно.
Набрал подходящих плагинов и понеслась. Большая часть системы была накликана мышкой, остальное - запрограммировано. Дошел до задачи массового импорта авторов публикаций (сотрудников) в систему. Для понимания дальнейших действий следует немного рассказать о том как устроено хранение данных об авторах. Идея подсмотрена у истины. Рассмотрим на примере такого ФИО - Холёжников Роман Константинович. Допустим он имеет следующую публикацию:
Смирнов О.И., Холёжников Р.К., Петров Е.М., Иванов Е.М. Создание крутейших систем на OctoberCMS без регистрации и СМС (процедуры и реализации). М.: Наука, 1989. 128 с.
При решении в лоб нормализуем хранение. Каждому автору привязываем публикацию, при выводе рендерим "Фамилия И.О., Фамилия И.О. Название и остальное". И вот тут со строкой авторов (Смирнов О.И., Холёжников Р.К., Петров Е.М., Иванов Е.М.) начинаются сложности, когда важен порядок авторов для вывода, а не все авторы учитываются в системе, а в дальнейшем у публикаций появляются коэффициенты для разных отчетов, а для определенных отчетов определенных авторов надо исключать из расчётов и так далее.
В представленном примере автор упоминается как "Холёжников Р.К.", однако такой автор может упоминаться в публикациях как:
- Холежников Р.К.
- Holezhnikov R.
- Holeznikov R.
- Kholezhnikov R.
- Holezhnikov RK
Это альтернативные имена автора или синонимы, которые привязываются к сущности Автор, позволяя идентифицировать подавляющее большинство публикаций автоматически + первоначально введенная в систему строка авторов остаётся неизменной.
Возвращаясь к импорту в Drupal. На тот момент не был 100% готов модуль Migrate ядра и плагин для хранения синонимов (по-моему это был Field Group) не имел возможности импорта. Не пальцем деланы, идем в профилировщик БД, смотрим необходимые запросы, повторяем с нужными данными. И вот тут пришло удивление: чтобы внести визуально 1 запись в базу пишется 112 INSERT'ов. 112 Карл! Запросы связаны между собой, часть из них с какими-то уникальными хэшами. Плата за универсальность. На исследование возможности импорта и эксперименты было потрачено недели 2. И через некоторое время принято решение взять что-то более гибкое и управляемое. Так как в восьмой drupal завезли Symfony фреймворк, то имелось некоторое представление, что с помощью фреймворка можно сделать то, что требуется.
Были проанализированы имеющиеся php фреймворки. Выбор остался за Laravel. Результат, как всегда, хочется вчера и, опять же, писать велосипеды не хотелось, поэтому я склонялся к какой-нибудь CMS на основе Laravel. Выбор остался за OctoberCMS. На тот момет я отметил следующие пункты:
- Написание CRUD / админки досаточно быстро
- Базовая функциональность по управлению пользователям (в плагине Users)
- Написание бизнес-логики в компонентах плагина аналогично controller/actions
- Возможность использовать наработки достаточно крупного Laravel сообщества
- AJAX фреймворк
Поставленные задачи успешно решены. По прошествию нескольких лет, считаю выбор правильным.