Логика работы

18 февраля 2016, 16:11

Компонент Office - это модульная система, в которой может быть сколько угодно частей (контроллеров). В стандартном комплекте их 4:

  • Auth - авторизация через email
  • Profile - работа с профилем пользователя
  • miniShop2 - вывод личного кабинета MS2
  • RemoteAuth - авторизация на один сайт через другой

В самом компоненте есть сниппет Office, который вызывает нужный контроллер и передает ему все указанные параметры. Таким образом, возможные настройки, чанки, и прочие свойства зависят от контроллера и в сниппете не прописаны.

Например, вот вызов сразу всех 3х контроллеров на одной странице.

[[!Office?&action=`Auth`]]
[[!Office?&action=`Profile`]]
[[!Office?&action=`miniShop2`]]

Для стандартных контроллеров есть и специальные сниппеты с прописанными параметрами - просто для удобства. Внутри все они всё равно вызывают сниппет Office.

Настройка контроллеров

В контроллер передаётся всё, что вы указали сниппету, и он сам решает, что ему нужно. Все стандартные скрипты и стили необходимые для работы регистрируются через системные настройки, как у miniShop2.

Например, через системную настройку office_extjs_css можно изменить внешний вид личного кабинета miniShop2

Старый вид ([[++assets_url]]components/office/css/main/lib/xtheme-modx.old.css)

Новый вид ([[++assets_url]]components/office/css/main/lib/xtheme-modx.new.css)

По умолчанию внешний вид выбирается в зависимости от установленной версии MODX - 2.2 или старше.

Вообще, контроллер - это обычный php класс, который наследует стандартный класс из Office. Эти классы лежат в директории /core/components/office/controllers/ и, благодаря модульной архитектуре, вы легко можете изменить любой из них.

Нужно просто сделать копию, переименовать и вызвать:

[[!Office?
    &action=`AuthCopy`
]]

Также в Office можно регистрировать контроллеры из устанавливаемых дополнений.

Расширение сторонними компонентами

Сторонние дополнения могу регистрировать свои контроллеры путём добавлением пути к ним в системном параметре office_controllers_paths.

Для упрощения этой работы лучше всего использовать методы Office::addExtenstion() и Office::removeExtension() - принцип такой же, как и при регистрации моделей компонентов в MODX.

Вы можете посмотреть пример в заготовке для разработки дополнений modExtra:

Работа с записями modExtra в админке

Работа с записями modExtra снаружи сайта

Зарегистрированный контроллер выводится по своему имени. В данном случае это :

[[!Office?&action=`modExtra`]]

Вам вовсе не обязательно использовать Ext JS, это просто пример возможностей.

Вот, всё необходимое для реализации редактирования записей modExtra на фронтенде сайта, одним коммитом.

После регистрации пути к контроллеру Office будет загружать его из указанной директории для всех действий, с ним связанных. Вам не нужно ничего никуда копировать, вы можете поставлять и обновлять свой виджет внутри своего пакета. По этому принципу уже работает управление ключами в modstore.pro и вывод статистики продаж авторов.

Если же вы планируете использовать Ext JS в своих виджетах, то обратите внимание, что по умолчанию уже подгружаются кое-какие улучшенные компоненты Office, типа таблицы со встроенным поиском - можно свободно их расширять.

Так как modExtra предназначен для разработки дополнений для MODX и уже поддерживает работу с Office, советую использовать в качестве примера именно его.


Предыдущий документ
Быстрый старт
Следующий раздел
Контроллеры