MODX. Некоторая информация по API MODX
Отредактировано: 14 Ноября 2019
Документация по версии API Modx Revolution 2.2
Документация по версии API Modx Revolution 2.x
Подключаем MODX API
Для внешнего использования MODX:
// Подключаем MODX API
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
или:
// Подключаем
define('MODX_API_MODE', true);
require 'index.php';
// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
Проверяем:
if ($res = $modx->getObject('modResource', 1)) {
print_r($res->toArray());
}
//или так
$response = $modx->runProcessor('resource/get', array('id' => 1));
if (!$response->isError()) {
print_r($response->response['object']);
}
else {
$modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
}
Процессоры
Процессор — код php, который выполняется вашим AJAX-коннектором (modX::runProcessor). Он делает все, что требуется, и возвращает JSON.
modObjectUpdateProcessor
Процесс modObjectUpdateProcessor отвечает за обновление данных. Пример класса процессора:
<?php
class sampleCodeUpdateProcessor extends modObjectUpdateProcessor {
public $classKey = 'sampleCode';
public $languageTopics = array('sample:pricing');
public $objectType = 'sample';
}
return 'sampleCodeUpdateProcessor';
-
Процессор создается, свойства установливаются.
-
Выполняется метод checkPermissions(), использующаяся для проверки, пользовательских прав.
-
Запускается метод getLanguageTopics(), подгружающая лексические данные.
-
Метод initialize(): получает первичный ключ (из открытой переменной primaryKeyField, по умолчанию имеет значение «id»), получает объект на основе classKey и публикует значение первичного ключа и, если это расширение modAccessibleObject, проверяет сеанс пользователя на соответствие «сохранить» политику. Если функция initialialize не возвращает true, запрос отменяется с сообщением об ошибке.
-
Запускается метод beforeSet(): по умолчанию эта функция только проверяет, установлены ли какие-либо ошибки (например, $ this-> addFieldError ('fieldname', 'error')). Если в результате не true, процессор возвращает ошибку.
-
Вызывается метод fromArray() для объекта (доступного как $ this-> object) со всеми опубликованными свойствами.
-
Запускается метод beforeSave(). Как и в случае с методом beforeSet, он только проверяет, были ли зарегистрированы ошибки. Если результат не является логическим значением true, процессор возвращает ошибку со значением, возвращаемым как сообщение.
-
Вызывается метод validate() для объекта. Если это не возвращает положительное значение, сообщения об ошибках устанавливаются как ошибки поля.
-
Если вы установили переменную beforeSaveEvent для класса, это событие вызывается, и если оно не возвращает true, сохранение предотвращается. Хотя функция fireBeforeSaveEvent() помечена как открытая, вы, вероятно, не захотите переопределять это в обычных случаях.
-
Запускается метод SaveObject(), который вызывает save() на объекте. Согласно встроенным комментариям, это может быть переопределено для временного и непостоянного обновления объекта.
-
Запускается метод FireAfterSaveEvent(), который запускает событие, указанные в afterSaveEvent переменной класса.
-
Запускается метод LogManagerAction(), который регистрирует общее сообщение в лог менеджер (доступен в разделе Отчеты> Диспетчер действий).
-
Сообщение об успешном завершении возвращается через метод cleanup(), которая фактически оборачивает pre-2.2 $ modx-> error-> success / fail, часто используемый в процессорах.
-
Результат (success или failure) обрабатывается в объекте modProcessorResponse и возвращается.
modObjectGetListProcessor
Процесс modObjectGetListProcessor используется для заполнения сеток в modExt Grid (формы данных в админке MODX), или в любом другом виджете или сниппете использующем JSON Data Store.
Минимальный код класса для процессора GetList:
<?php
class sampleGetListProcessor extends modObjectGetListProcessor {
public $classKey = 'sampleClassName'; // имя класса, объект которого вы собираетесь получить
public $defaultSortField = 'id'; // поле по которому будет происходить сортировка
public $defaultSortDirection = 'desc'; // направление для сортировки
}
return 'sampleGetListProcessor '; // запускаем обработку класса
-
Процессор создается, свойства установливаются.
-
С помощью checkPermissions(), происходит проверка — разрешен ли пользователю доступ к процессору.
-
Происходит поиск лексических данных для загрузки через getLanguageTopics, который получает свои данные из переменной languageTopics (в виде массива).
-
Вызывается метод initialize(), который устанавливает ряд свойств по умолчанию, включая sort, для переменной класса defaultSortField (default: name) и направление к переменной defaultSortDirection (default: ASC).
-
Вызывается process().
-
process() запускает beforeQuery(), и если результат — false, он будет считать, что процессор вышел из строя, и отменит дальнейшее выполнение.
-
process() запускает getData().
-
Метод getData() создает объект xPDOQuery для типа classKey.
-
Метод getData() вызывает prepareQueryBeforeCount(xPDOQuery $c) (если установлен), позволяющий добавлять дополнительные условия к запросам. После этого он получает общее количество результатов, используя modX.getCount.
-
Метод getData() вызывает prepareQueryAfterCount(xPDOQuery $c) (если установлен).
-
Запрос сортируется с помощью метода getSortClassKey(), а также свойств sortAlias, sort и dir .
-
Если свойство limit больше 0, оно ограничивает запрос и устанавливает смещение.
-
Вызывается modX.getCollection с вашими данными, если они были получены.
-
Каждая строка повторяется с использованием метода iterate(array
$data
). Повторяется вызов beforeIteration(array$list
) и начинает циклически проходить по строкам. -
Если переменная checkListPermission имеет значение true, объект расширяет modAccessibleObject, и если checkPolicy('list') — значение false, строка пропускается.
-
Вызывается prepareRow(xPDOObject | modAccessibleObject $object), который должен вернуть массив с полями объектов. Отличный метод для настройки полученных данных. Массив добавляется в список.
-
После прохода по всему набору результатов вызывается afterIteration(array $list).
-
Данные возвращаются.
Константы MODx Revolution
Наиболее используемые константы предусмотренные API MODX.
Код | Описание | Результат |
---|---|---|
MODX_BASE_URL | относительный путь к корню сайта | / |
MODX_ASSETS_URL | относительный путь к ресурсам | /assets/ |
MODX_MANAGER_URL | относительный путь к админ части | /manager/ |
MODX_CONNECTORS_URL | относительный путь к коннекторам | /connectors/ |
MODX_URL_SCHEME | протокол сайта | http:// или https:// |
MODX_HTTP_HOST | адрес сайта | site.ru |
MODX_CORE_PATH {core_path} |
абсолютный путь к ядру сайта | /home/www/core |
MODX_ASSETS_PATH {assets_path} |
абсолютный путь к ресурсам | /home/www/assets/ |
MODX_PROCESSORS_PATH | абсолютный путь к процессорам | /home/www/core/model/modx/processors/ |
MODX_CONNECTORS_PATH | абсолютный путь к коннекторам | /home/www/connectors/ |
MODX_MANAGER_PATH | абсолютный путь к админ части | /home/www/manager |
MODX_BASE_PATH {base_path} |
абсолютный путь к корню сайта | /home/www/ |
MODX_API_MODE | подключение API MODX |
Методы MODX
sendForward()
sendForward('id') — позволяет загрузить некий ресурс без изменения url. При помощи этого метода работает выдача страниц «404 не найдено» и «401 требуется авторизация».
Также при помощи этого метода можно выдавать заменяющую страницу, сохранив оригинальные pagetitle, introtext и другие поля, нужно просто указать дополнительный массив с ключами:
$options = array(
'merge' => 1, // Включает механизм склейки полей
// список оригинальных полей, которые нужно исключить из результата
'forward_merge_excludes' => 'id,template,type,published,class_key'
);
$modx->sendForward(15, $options);
Ключ forward_merge_excludes заведует полями исходной страницы, которые нужно исключить из результатов. К эти полям обязательно будут прибавлены: content, pub_date, unpub_date, richtext.
getOption() [xPDO]
Подробности в статье посвященной getOption().
Работа с классами
Методы addPackage(), addExtensionPackage(), loadClass(), getService()
Подробности в статье посвященной методам loadClass(), getService(), addPackage() и addExtensionPackage().
Здравствуйте!
Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи.