1. При вызове через коннекторы не вызываются MODX-
- При вызове через коннекторы не вызываются MODX-ивенты, и самое главное — OnHandleRequest, а именно на это событие срабатывает плагин, инициализирующий modxSmarty (объект this->modx->smarty в процессоре доступен. Если через коннектор его вызывать, то не будет объект $this->modx->smarty и выполнение завершится фатальной ошибкой.
Сразу скажу, что если мне нужен смарти в процессоре при вызове через коннектор, я делаю так: в процессоре дописываю код в initialize()
public function initialize(){
if(empty($this->modx->smarty)){
$this->modx->invokeEvent('OnHandleRequest');
}
return parent::initialize();
}
- Старайтесь не использовать этой конструкции
if($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){…
Зачем вам она нужна? Если у вас в логике уже прописано switch($_REQUEST['action']), то это уже фильтрует запросы. Какая разница вам аджаксом запрос отправлен или нет? И, на смарти твой пример надо бы переписать, чтобы по сабжу было :)
- Под каждый запрос шаблон создавать — не кашерно. Просто документу указывать без шаблона, а в контент прописывать путь до смарти-шаблона
[[!smarty?tpl=......]]. А в нем уже все прописывать что нужно, и если надо отдать именно в JSON, то преобразовываем данные. Самый простой способ — это вызвать подшаблон, полученные данные в переменную зафигачить и преобразовать данные:
{include $tpl_path assign=result}
{json_encode($result)}