Почему 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 фреймворк

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

Похожие записи

Angular. Manually retry http request

На память. Некоторое время назад я решил достаточно необычную задачу, но в последствии на backend`е переделали логику и код был удалён из проекта.

Medium like image zooming

Полгода собирался в блог добавить zoom на изображения как на medium и вот "новый год" позволил мне это сделать.