Процессор не найден: mgr/name/getlist
Добрый день!
Создаю админку для своего компонента по статье.Возникла проблема вывода грида полей объекта. Экшн прописан как в статье
Создаю админку для своего компонента по статье.
baseParams: { action: 'mgr/name/getList' }
Процессор на фоходится в core/components/component_name/processors/mgr/name/getList.class.php. «Сеть» файрбага показывает, что файл assets/components/component_name/connector.php возвращиет сообщение Процессор не найден: mgr/name/getlist
Подскажите, что могло пойти не так или хотя бы как можно найти где допущена ошибка. Заранее благодарен.Комментарии: 17
Неужели никто не разбирался, как построена админка и пользуются modExtra'ми или Doodles'ами?
Попробуйте переименовать файл процессора в getlist.class.php (все буквы строчные)
Спасибо, что откликнулись) имя файла состоит только из строчных букв, здесь просто опечатка
А можно посмотреть на файлы
core/components/component_name/index.class.php
и
core/components/component_name/controllers/home.class.php
core/components/component_name/index.class.php
и
core/components/component_name/controllers/home.class.php
home.class.php
<?php
class CoursesHomeManagerController extends CoursesManagerController
{
public function process(array $scriptProperties = array()){}
public function getPageTitle() { return $this->modx->lexicon('courses'); }
public function loadCustomCssJs()
{
$this->addJavascript($this->courses->config['jsUrl'].'mgr/widgets/courses.grid.js');
$this->addJavascript($this->courses->config['jsUrl'].'mgr/widgets/home.panel.js');
$this->addLastJavascript($this->courses->config['jsUrl'].'mgr/sections/index.js');
}
public function getTemplateFile() { return $this->courses->config['templatesPath'].'home.tpl'; }
}
index.class.php <?php
require_once dirname(__FILE__) . '/model/courses/courses.class.php';
abstract class CoursesManagerController extends modExtraManagerController {
public $courses;
public function initialize() {
$this->courses = new Courses($this->modx);
$this->addJavascript($this->courses->config['jsUrl'].'mgr/courses.js');
$this->addHtml('<script type="text/javascript">
Ext.onReady(function() {
Courses.config = '.$this->modx->toJSON($this->courses->config).';
});
</script>');
return parent::initialize();
}
public function getLanguageTopics() {
return array('courses:default');
}
public function checkPermissions() { return true;}
}
class IndexManagerController extends CoursesManagerController
{
public static function getDefaultController() { return 'home'; }
}
Courses — это мой компонент. Вроде все как надо… сравнивал с quip'ом — вроде все по аналогии. Но вполне возможно, что я не замечаю пустячной детали
Ой, извиняюсь, в первую очередь интересен файл /model/courses/courses.class.php — есть ли там указание processorsPath?
конструктор выглядит так:
function __construct(modX &$modx, array $config = array())
{
$this->modx =& $modx;
$basePath = $this->modx->getOption('courses.core_path',$config,$this->modx->getOption('core_path').'components/courses/');
$assetsUrl = $this->modx->getOption('courses.assets_url',$config,$this->modx->getOption('assets_url').'components/courses/');
$this->config = array_merge(array(
'basePath' => $basePath,
'corePath' => $basePath,
'modelPath' => $basePath.'model/',
'processorsPath' => $basePath.'processors/',
'templatesPath' => $basePath.'templates/',
'chunksPath' => $basePath.'elements/chunks/',
'jsUrl' => $assetsUrl.'js/',
'cssUrl' => $assetsUrl.'css/',
'assetsUrl' => $assetsUrl,
'connectorUrl' => $assetsUrl.'connector.php',
),$config);
$this->modx->addPackage('courses', $this->config['modelPath']);
if ($this->modx->lexicon)
{
$this->modx->lexicon->load('courses:default');
}
}
При этом echo $this->config["processorsPath"];
выдает правильный путь к процессорам
На первый взгляд, все верно… Попробуйте, все-таки, сделать на основе modExtra…
Но, если рассудить логически, то раз ошибок javascript'a нет, панель подгружается, даже грид подгружается — то в javascript'e нет ошибок. Что может влиять на то, что процессор не грузится? — пути к файлам. Тогда возникает вопрос: откуда начинаются формирование пути в action? От processorsPath?
А в connector.php что?
В modExtra путь к процессору указывается там https://github.com/bezumkin/modExtra/blob/master/assets/components/modextra/connector.php#L16
В modExtra путь к процессору указывается там https://github.com/bezumkin/modExtra/blob/master/assets/components/modextra/connector.php#L16
Спасибо, что не обошли стороной данный вопрос и решели помочь) В коннекторе
<?php
require_once dirname(dirname(dirname(dirname(__FILE__)))).'/config.core.php';
require_once MODX_CORE_PATH.'config/'.MODX_CONFIG_KEY.'.inc.php';
require_once MODX_CONNECTORS_PATH.'index.php';
$corePath = $modx->getOption('courses.core_path',null,$modx->getOption('core_path').'components/courses/');
require_once $corePath.'model/courses/courses.class.php';
$modx->courses = new Courses($modx);
$modx->lexicon->load('courses:default');
$path = $modx->getOption('processorsPath', $modx->courses->config, $corePath.'processors/');
$modx->request->handleRequest(array(
'processorsPath' => $path,
'location' => '',
));
Сейчас заметил, что прямое обращение из браузера к файлу хост/core/components/courses/processors/mgr/course/getlist.class.php возвращает ошибку
Fatal error: Class 'modObjectGetListProcessor' not found in хост\core\components\courses\processors\mgr\course\getlist.class.php on line 3
Но наверное эта ошибка появляется из-за того, что обращаемся к процессору не через коннектор?
Да, MODX не проинициализирован
В коннекторе вроде все верно.
В JS baseParams: { action: 'mgr/course/getlist' } все-таки с маленькой буквы?
В процессоре имя класса в конце указано, как в modExtra?
github.com/bezumkin/modExtra/blob/master/core/components/modextra/processors/mgr/item/getlist.class.php#L36
В коннекторе вроде все верно.
В JS baseParams: { action: 'mgr/course/getlist' } все-таки с маленькой буквы?
В процессоре имя класса в конце указано, как в modExtra?
github.com/bezumkin/modExtra/blob/master/core/components/modextra/processors/mgr/item/getlist.class.php#L36
getlist точно с прописными буквами, код процессора ниже
Ну и сам процессор теперь покажите. В последней стрчке есть возвращение имени класса?
return 'courseItemGetListProcessor';
Код процессора выглядит следующим образом:
<?php
class CourseGetListProcessor extends modObjectGetListProcessor
{
public $classKey = 'Courses';
public $languageTopics = array('courses:default');
public $defaultSortField = 'title';
public $defaultSortDirection = 'ASC';
public $objectType = 'courses.course';
}
return 'CourseGetListProcessor';
Все таки решил перейти на modExtra, а уже там разобраться с тонкостями работы.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.