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

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

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

Собственные сообщения об ошибках валидации форм OctoberCMS

Во время разработки модели данных OctoberCMS при необходимости, можно использовать собственные сообщения об ошибках валидации полей формы вместо сообщения The :attribute field is required. по-умолчанию. В статье показывается как, достаточно просто, это делается.

FrontEnd контроллеры в OctoberCMS

В OctoberCMS нет концепции frontEnd контроллеров. Иными словами, идеология этой CMS не подразумевает возможность просто создать некий ProductController с несколькими action для обслуживания маршрутов Route::method('product/{id}', 'ProductController@show'). Вместо этого предлагается использовать компоненты плагинов. Именно компоненты являются формой frontEnd контроллеров.

Medium like image zooming

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