Ajax - getPage
Здравствуйте. Есть обычный обработчик ajax запросов. Там вызывается сниппет getPage и выскакивает ошибка
<b>Fatal error</b>: Call to a member function getParameters() on a non-object in <b>M:\OpenServer\domains\localhost\API\core\cache\includes\elements\modsnippet\1.include.cache.php</b> on line <b>75</b>
Нарыл в руководстве Боба Рэя ответОбычно это означает, что объект $modx не доступен в данном месте вашего кода. Если это код внутри функции, вам следует передать данный объект как:
global $modx;
в начале функции для того, чтобы дать PHP знать, что вы хотите использовать объект $modx извне функции, вместо создания нового.
Если это не сработало, иногда нужно передать $modx в функцию в качестве аргумента.
Вот мой код, куда это вставить? Пробовал в самом начале — не работает.<?php
header('Content-Type: text/html; charset=utf-8');
function getData($action, $id){
// global $modx;
$res;
$mtime = microtime();
$mtime = explode(" ", $mtime);
$mtime = $mtime[1] + $mtime[0];
$tstart = $mtime;
/* /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
if(!defined('MODX_API_MODE')){
define('MODX_API_MODE', true);
}
$modx_cache_disabled = true;
// подключаем настройки и определим базовый путь для MODX
require_once '../../config.core.php';
if(!defined('MODX_CORE_PATH')) define('MODX_CORE_PATH', $_SERVER['DOCUMENT_ROOT'].'/core/');
// подключаем класс modX
if(!include_once (MODX_CORE_PATH . "model/modx/modx.class.php")){
$errorMessage = 'Site temporarily unavailable';
include(MODX_CORE_PATH . 'error/unavailable.include.php');
header('HTTP/1.1 503 Service Unavailable');
echo "<html><title>Error 503: Site temporarily unavailable</title><body><h1>Error 503</h1><p>{$errorMessage}</p></body></html>";
exit();
}
// вывод данных из буфера
ob_start();
if(empty($options) || !is_array($options)) $options = array();
$modx = new modX('',$options);
if(!is_object($modx) || !($modx instanceof modX)){
ob_end_flush();
$errorMessage = '<a href="setup/">MODx not installed. Install now?</a>';
include(MODX_CORE_PATH . 'error/unavailable.include.php');
header('HTTP/1.1 503 Service Unavailable');
echo "<html><title>Error 503: Site temporarily unavailable</title><body><h1>Error 503</h1><p>{$errorMessage}</p></body></html>";
exit();
}
$modx -> startTime = $tstart;
$modx -> setLogLevel(modX::LOG_LEVEL_ERROR);
$modx -> setLogTarget('FILE');
$modx -> setDebug(E_ALL & ~E_NOTICE);
$modx -> initialize('web');
$modx -> resource = $modx -> getObject('modResource', $id); //ОЧЕНЬ ВАЖНЫЯ СТРОКА (ПОЛУЧАЕМ ССЫЛКУ НА ТЕКУЩИЙ ОБЪЕКТ ИЗ AJAX ВЫЗОВА)
/* /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
// Вызов нужного метода
switch($action){
case 'paging':
$params['parents'] = $id;
$params['tpl'] = 'ajaxResources';
$params['includeTVs'] = 1;
$params['processTVs'] = 1;
$params['showHidden'] = 1;
$params['element'] = 'getResources';
$params['limit'] = 1;
$res = $modx -> runSnippet('getPage', $params);
break;
}
if(!empty($res)) {
return $res;
}
}
// Откликаться будет ТОЛЬКО на ajax запросы
if($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest'){
return;
}
// сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
$action = $_GET['action'];
// Если в массиве POST нет действия - выход
if (empty($action)){
return;
}
else{
echo getData($action,(int) $_POST['id']);
}
?>