Как работать с MODX Api
Регулярно встречаю в сети разные велосипеды про то, как подключиться к MODX снаружи для работы с его Api. Даже на официальном сайте это описано сложновато.
Так вот, все гораздо проще:
Так вот, все гораздо проще:
// Подключаем
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');Проверяем простую работу с Api: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());
}Таким образом вам доступны все методы, словари, процессоры и прочее. Это нужно, например, для импорта/экспорта больших объемов данных из консоли сервера, чтобы не зависить от таймаута web-сервера. Комментарии: 25
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
И получается что так запрос выполняется быстрее.
В среднем 100-120 мс, а через сниппет вызванный в ресурсе 150-200
Интересно почему, и какие могут быть печальные последствия использования такого метода?
Последствий никаких. Но лично мне удобнее с Ajax работать при вызове страницы.
Снаружи я подключаюсь, когда надо серьезно поработать с БД (ипорт-экспорт и все такое)
Подскажите пожалуйста, импорт из CSV позволяет создать более 1000 страниц с заданными параметрами (Имя, описание, алиас и номер шаблона)???
// Подключаем
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 (!isset($modx->miniShop) || !is_object($modx->miniShop)) {
$modx->getService('minishopext','miniShopExt', $modx->getOption('core_path').'components/minishop/model/minishop/', $scriptProperties);
if (!($modx->miniShop instanceof miniShopExt)) return '';
}
И ничего не происходит (
Вы просто запустили класс и он ничего не делает. Если команда getService выполнена с ошибкой — она будет в системном журнале. Если нет — везде пусто.
Если код инициализации Службы вставить в сниппет то все заводится.
https://gist.github.com/3026530
Если просто во внешнем файле лежащем в корне сайта, то ничего не выводит
Сделал так
require str_replace($_SERVER[«REQUEST_URI»],'',(__FILE__)).'/index.php';
пока работает… на сколько верное такое решение — посмотрим.
К стате $_SERVER['DOCUMENT_ROOT'] — у меня не захватывает потдомен, т.е. путь до основного домена.
Под проект конечно можно всё жостко прописать и не париться, но у меня небольшое расширение — а там у всех по разному.
Попробуй добавить
перед выходом из скрипта.
У тебя же там наверняка есть die() или exit()? Вот перед ним и нужно закрыть сессию.
можно сделать так:
Таймаут он как был так и есть от него не куда не денешься!
И какой же веб сервер мне выдаст timeout, если я запускаю скрипт вот так?
При запуске из консоли нет веб-сервера, есть php-cli — (command line interpretator).
между wget myfile.php?
Если разница не понятна — то я не знаю о чем тут говорить.