modSociety — социальный и комментарийный слой MODX

modSociety появился из очень практической потребности: MODX отлично подходил как основа проекта, но для сайтов с живым пользовательским контентом ему не хватало нескольких базовых сущностей. Блоги, топики, комментарии, рейтинги, связи между ними, права доступа — всё это приходилось либо каждый раз собирать заново, либо вынести в отдельный повторно используемый слой.

Так и появился modSociety. Он задумывался не как готовый форум или социальная сеть с жёстко заданным интерфейсом, а скорее как дополнительный уровень над MODX, который даёт проекту социальные сущности и оставляет свободу в том, как именно ими пользоваться.

Следы ранней разработки сохранились как минимум с начала 2013 года. В GitHub Gist с загрузкой modBlog уже видны modSociety, каталог core/components/modsociety/ и производный класс modBlog. Это хорошо показывает исходную идею: modSociety должен был быть базовым слоем, а конкретная прикладная логика — строиться поверх него.

Через год этот подход уже использовался в реальном большом проекте. В публикации «MODX-Клуб: обновленная версия сайта» я описывал переход Клуба со старой платформы на новую архитектуру, где modSociety стал основой блогово-социальной части сайта. На него переносились блоги, топики, комментарии, пользователи и рейтинги.

При этом важным был не только сам набор сущностей. Одна из главных задач заключалась в том, чтобы социальный слой нормально жил внутри модели безопасности MODX. Блоги и топики могли иметь разные уровни доступа, а выборки должны были учитывать политики и возвращать пользователю только то, что ему действительно разрешено видеть.

Именно поэтому modSociety для меня всегда был скорее расширением самого подхода MODX, чем отдельным конечным продуктом. Логика строилась вокруг processors, моделей и xPDO, а presentation layer оставался отдельным. Интерфейс можно было делать на Smarty через modxSmarty или вообще другим способом — социальные сущности от этого не менялись.

Позже modSociety продолжал использоваться уже не только внутри MODX-Клуба. Например, в NewsModxBox он применялся как слой комментариев, вместе с phpTemplates/modxSmarty на уровне представления и processors на уровне прикладной логики. Это как раз тот сценарий, ради которого компонент и создавался: не готовый сайт целиком, а переиспользуемая часть архитектуры.

Сегодня исходный код проекта доступен в репозитории MODX-Club/modSociety на GitHub. Сам компонент уже относится к legacy-эпохе MODX-разработки, но архитектурно он хорошо показывает направление, к которому я тогда пришёл: максимально использовать стандартные механизмы MODX, добавлять недостающие сущности отдельным слоем и не смешивать бизнес-логику с конкретным frontend-представлением.

В этом смысле modSociety хорошо дополняет другие мои компоненты из экосистемы Fi1osof: modxSite отвечал за логический и API-слой проекта, modxSmarty — за представление, а modSociety давал базовые сущности для проектов, где пользователи сами создают контент и взаимодействуют друг с другом.