Логика работы
Компонент 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::addExtension() и Office::removeExtension() - принцип такой же, как и при регистрации моделей компонентов в MODX.
Вы можете посмотреть пример в заготовке для разработки дополнений modExtra:
Работа с записями modExtra в админке
Работа с записями modExtra снаружи сайта
Зарегистрированный контроллер выводится по своему имени. В данном случае это:
[[!Office? &action=`modExtra`]]
Вам вовсе не обязательно использовать Ext JS, это просто пример возможностей.
Вот, всё необходимое для реализации редактирования записей modExtra на фронтенде сайта, одним коммитом.
После регистрации пути к контроллеру Office будет загружать его из указанной директории для всех действий, с ним связанных. Вам не нужно ничего никуда копировать, вы можете поставлять и обновлять свой виджет внутри своего пакета. По этому принципу уже работает управление ключами в modstore.pro и вывод статистики продаж авторов.
Если же вы планируете использовать Ext JS в своих виджетах, то обратите внимание, что по умолчанию уже подгружаются кое-какие улучшенные компоненты Office, типа таблицы со встроенным поиском - можно свободно их расширять.
Так как modExtra предназначен для разработки дополнений для MODX и уже поддерживает работу с Office, советую использовать в качестве примера именно его.