Николай Ланец
1 июля 2013 г., 12:58

MODX Revolution addExtensionPackage();

Не могу точно сказать как давно в MODX Revolution появился метод addExtensionPackage() (скорее всего начиная с версии 2.2), но могу точно сказать, что на этот метод надо обратить внимание любителям писать свои эддоны.
В чем его суть? Он позволяет указывать MODX-у, какие пакеты подключать при инициализации движка. Это будет более понятно тем, кому приходилось подключать свои пакеты через $modx->addPackage(), чтобы можно было работать со своими объектами через стандартные методы $modx->newObject(), $modx->getObject() и т.п. Просто если вы написали свой пакет, и его классы не находятся в папке core/model/modx/, то просто так к этим объектам нельзя обратиться, необходимо «дать знать» MODX-у, где эти объекты хранятся. Для этого как раз и существует метод $modx->addPackage(). Но в чем проблема? Проблема в том, что приходится каждый раз думать о том, чтобы пакет обязательно был подключен, и для этого как правило создается плагин, срабатывающий по событию onHandleRequest, или кто как изворачивается. С плагином сразу проблема возникает: при запросах на коннекторы просто так не вызываются события, их вызов приходится дописывать. В общем тонкостей довольно много. Но лично я для себя использую в качестве решения большинства этих головняков метод $modx->addExtensionPackage(); Вызывая этот метод с указанием названия своего пакета (класса) и пути до пакета, MODX записывает эти данные в системную настройку extension_packages. То есть таким образом мы выполняем «подключение» пакета, и выполняется это всего один раз. К примеру
$modx->addExtensionPackage('mypackage', '[[++core_path]]components/mypackage/model/');
После того, как вы выполните этот скрипт и данные о пакете появятся в настройке extension_packages, каждый раз при инициализации контекста будет выполняться подключение указанных пакетов. И да, именно возможность указания настроект для конкретных контекстов, позволяет четко управлять, где будут пакеты подключаться, а где нет.
Вообще этот метод описан для кастомных типов документов, но годится для многих случаев. Правда пока очень глубоко не вдавался, но есть подозрения, что он не хочет таким образом подключать пакеты внутри папки /core/model/modx/, в частности пакет sources не хочет подключать никак.
Не подскажите куда надо этот код добавить в modExtra чтобы этот параметр прописался в системных настройках modx ?
Вероятней всего вот сюда. Вот можно глянуть на примере того же modx-hybridauth.

Добавить комментарий