Приветствую
Сейчас изучаю modx, и никак не могу найти наиболее идеологически верный способ, которым можно обработать ajax-запросы в кастомной (самописной) компоненте НЕ из мэнеджера, а просто, для обычного web-контекста. То есть, есть некий сайт, на нём находится мой ajax-виджет, который "подтягивает" данные с сайта, анализирует их выводит какую-либо соответствующую информацию. Однако, сам компонент (бищнес логика этого компонента) должна выполняться в контексте архитектуры modx, то есть, иметь достум к $modx->*, на него должны распространяться механизмы безопасности и т.д. то есть быть обычным modx-компонентом.
Лично я сейчас вижу такой способ: создаём ресурс с mime-type json, отключаем для него шаблон и в качестве контента вставляем некий сниппет: [[doAjaxParseAndFormatResponse]] который собственно и делает всенаеобходимые действия, затем отвечает каким-то другим аяксом (return json_encode($myResponseInfo);)
однако, в данном случае, мне бы не хотелось создавать для каждого вида ajax-запросов ресурс, который виден в дереве ресурсов, так же, нужно будет добавлять такие ресурсы при установке (в случае создания компоненты) и вообще, думаю есть какой-то более правильный способ это сделать.
в общем, не могли бы подсказать (и привести пример структуры директорий с последовательносью обращений) для обработки клиентских ajax-запросов из кастомных компонент?
В случае с компонентом необходимо использовать процессоры + коннекторы. коннекторы - это веб-акцессоры для процессоров. По идее коннекторы должны быть в connectors/components/mycomponent/ , но на практике коннекторы суют в /assest/components/mycomponent/ , что убивает некоторые функции modx. Также возможен вариант использования плагина, навешенного на подходящее событие (вроде OnWebPageInit) . Тут важно использовать самое подходящее событие, чтобы modx сделал не больше не меньше того, что он должен сделать когда придет AJAX запрос. С ходу и не подскажу, как уже писал - OnWebPageInit можно попробовать.
Насчет коннекторов быть может я не прав (что их можно использовать в вебморде).
Я думаю я бы выбрал один из вариантов:
1) Создать ресурс в blank шаблоном и поместить в него сниппет, обрабатывающий мои AJAX запросы.
2) Создать плагин и отлавливать свои xhr-запросы еще до того, как MODX начнет подгружать запрошенный ресурс.
3) Создать отдельную точку входа ввиде файла, скажем ajax.php
спасибо за ответ. Это ясно и так, однако, мне просто хотелось ухнать именно про идеологически-верный способ это делать, который является что-ли более MODx-way, а не просто как это сделать технически.
В общем, получается так, что самый правильный способ - это делать свои ресурсы с mime-type json, в котором будет туолько один выхов нужного нам сниппета... в общем, уж как-то слишком усложнено, но если сами разрабы говорят, что в MODx это правильно и идеологически-верно, тогда остановлюсь на этом способе.
с другой стороны, подобный подход даже более плавно интегрируется в саму идеологию MODx-а для фронтэнда, где роль коннектора выполняет ресурс-нода, на которую огут распространяться все прочие политики безопасности, видимости т.д... хотя, просто после Yii, такой подход просто отвергался мною чисто органически )
Идеологически все правильно и верно бывает только в сказках. MODx не идеал. Идеала нет вообще и быть не может.
В MODx нет никаких особых плюшек для xhr-запросов. Поэтому каждый как хочет так и реализует их обработку. Это мое мнение.
Я вот так работаю с AJAX
http://modx.im/blog/181.html
Еще через коннекторы, в этом нет ничего страшного