[EVO] Не могу подключить modx api

Здравствуйте!
Суть вопроса такова:
есть сниппет, который передает POST запрос через ajax, обращаясь к файлу, лежащему на сервере.
В начало этого файла подключаю MODx API
include_once($_SERVER['DOCUMENT_ROOT'].'/manager/includes/protect.inc.php');
include_once ($_SERVER['DOCUMENT_ROOT'].'/manager/includes/config.inc.php');
include_once($_SERVER['DOCUMENT_ROOT'].'/manager/includes/document.parser.class.inc.php');
$modx = new DocumentParser;

и так
require_once($_SERVER['DOCUMENT_ROOT'].'/manager/includes/protect.inc.php');
include_once ($_SERVER['DOCUMENT_ROOT'].'/manager/includes/config.inc.php');
include_once(MODX_BASE_PATH."manager/includes/document.parser.class.inc.php");
$modx = new DocumentParser;


и так
// Защита от некоторых опасностей при асинхронном вызове
require_once(MODX_MANAGER_PATH . '/includes/protect.inc.php');
// Установка режима MODx API
define('MODX_API_MODE', true);
// Инициализация парсера
include_once(MODX_MANAGER_PATH.'/includes/document.parser.class.inc.php');
$modx = new DocumentParser;
// Включение доступа к базе данных MODx
$modx->db->connect();
// Включение доступа к основным параметрам MODx
$modx->getSettings();

и так
// Защита от некоторых опасностей
require_once('manager/includes/protect.inc.php');
// Загрузка конфигурации
if (!$rt = @include_once 'manager/includes/config.inc.php') {
    exit('Невозможно загрузить конфигурационный файл MODx!');
}
// Установка режима MODx API
define('MODX_API_MODE', true);
// Инициализация парсера
include_once(MODX_MANAGER_PATH.'/includes/document.parser.class.inc.php');
$modx = new DocumentParser;
// Включение доступа к базе данных MODx
$modx->db->connect();
// Включение доступа к основным параметрам MODx
$modx->getSettings();


не работает.
Но если в файле просто вывести
return $_POST['данные'] — их обрабатывает скрипт

Что я не так делаю?
Преждевременно проверил на денвере — работает...API
а в инете нет.
Если создавать отдельный сниппет то api работает.

9 комментариев

avatar
Вот такое
include_once($_SERVER['DOCUMENT_ROOT'].'/manager/includes/protect.inc.php');
include_once ($_SERVER['DOCUMENT_ROOT'].'/manager/includes/config.inc.php');
define('MODX_API_MODE', true);
include_once($_SERVER['DOCUMENT_ROOT'].'/manager/includes/document.parser.class.inc.php');
$modx = new DocumentParser;
//$mylogin = $modx->getLoginUserName();
$out ='Тестируем ajax';
echo $out;																
									
выводит Could not load DBAPI class.
Непонятно…
Комментарий отредактирован 2013-01-28 14:17:58 пользователем siuzi_drum
avatar
А сборка какая стоит? Адрес админки изменен?
avatar
Сборка стоит от Дмитрия 1.0.8 (а на локалке где всё работает оф дистр с оф сайта 1.0.8).

пути я не переписывал. проверял все include.

Странная ситуация — если аяксом обращаться к пхп файлу через код другого сниппета не работает require_once (я использовал include_once), а если создать сниппет из этого файла, поместить его на страницу с пустым шаблоном, и обратится к этой странице через аякс (типа url: ajax.html) то работает без проблем.
Комментарий отредактирован 2013-01-29 08:09:07 пользователем siuzi_drum
avatar
$_SERVER['DOCUMENT_ROOT'] может отличаться корневого каталога сайта, где лежит папка manager. Используйте dirname(__FILE__)

Скрипт вызывается Ajax-ом, то MODX_BASE_PATH и MODX_BASE_PATH еще не установлены, т.к. определяются только в config.inc.php поэтому опять ваш вариант только dirname(__FILE__)
avatar
dirname (__FILE__) выводит как я понимаю путь до того файла, в котором вызывается эта функция.
то есть не та директория, в которой например конфиг MODx.
и так:
include_once(dirname (__FILE__) . '/config.inc.php');

и так
include_once(dirname ('manager/includes/') . '/config.inc.php');

неверно, или я не так делаю?
если
$dir = $_SERVER['DOCUMENT_ROOT'] . '/manager/includes/';

потом положить какой-нить документ и сделать
file_get_contents ($dir. 'myphpfile.php'); то выводит содержимое,
не понятно все равно, хоть тресни.(
avatar
dirname (__FILE__) — отдает папку в которой вы сейчас находитесь. Если вы находитесь в assets/snippets, то для подключения config.inc.php нужно написать
include_once(dirname (__FILE__) . '/../../manager/includes/config.inc.php');


Если говорить о костыльности такого метода — то смотрите в сторону index-ajax.php. А еще лучше — создайте для таких целей еще 1 документ в дереве ресурсов с шаблоном _blank (если требуется, то тип документа тоже можно выбрать) и отправлйте запрос к нему не извращаясь с include.

Там вам уже и чанки доступны и сниппеты и вообще все MODX API в вашем распоряжении.
avatar
Евгений,
А еще лучше — создайте для таких целей еще 1 документ в дереве ресурсов с шаблоном _blank (если требуется, то тип документа тоже можно выбрать) и отправлйте запрос к нему не извращаясь с include.
я так и сделал раньше
а если создать сниппет из этого файла, поместить его на страницу с пустым шаблоном, и обратится к этой странице через аякс (типа url: ajax.html) то работает без проблем.
И так как раз работает; раз так лучше, то оставлю так.
Комментарий отредактирован 2013-01-29 11:17:00 пользователем siuzi_drum
avatar
Вот и отлично. На самом деле, чем меньше различных скриптов инициализуют ядро — тем легче поддерживать сайт.
avatar
Мне кажется, что это тот же глюк, из-за которого не работает ajax-action в shokeeper.
  • Shin
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.