Ajax в MODx Revolution
Много людей спрашивают на форумах как использовать ajax в modx с процессорами, коннекторами и остальным. Как советуют разработчики: не используйте коннекторы для фронтэндовой ajax функциональности, вместо этого используйте плоский документ для ajax вызовов. Позвольте мне рассказать вам, как это сделать.
Используйте коннекторы для фронтэнд ajax функциональности вместо обращения к чистому документу для ajax вызовов. Давайте я расскажу вам как это сделать. Создайте сниппет в бекенде и назовите его ajax. Скопируйте в сниппет представленный ниже код, работа которого объясняется в комментариях. В данных момент не беспокойтесь о переменных $_REQUEST
<?php
$output='';
//это название файла-обработчика
$procname=$_REQUEST['action'];
//это обращение к компоненту component
$comp=$_REQUEST['component'];
//файл обработчик с путём
$f= $modx->getOption('core_path').'components/'.$comp.'/processors/'.$procname.'.php';
if (file_exists($f)) {
//влючение этого файла, таким образом здесь назначается вывод процессора
$output= include $f;
} else {
$output= 'Action not found: '.$f;
}
//преобразовать вывод процессора в json формат
return $modx->toJSON($output);
теперь создайте документ с именем Ajax и псевдонимом – ajax. Назначьте пустой шаблон, определите «Скрыть от меню» чекбокс и опубликуйте его.
В поле контент сделайте вызов некешированного ajax сниппета [[!ajax]]

Всё, на этом мы закончили с ajax функциональностью. Всё, что вам нужно – это передать действие, переменные компонента в вашем javascript для любого ajax запроса в вашем сайте url для вашего ajax запроса – это vashsite/ajax, если у вас включены ЧПУ (SEF) иначе ваш url будет vashsite/index.php?id=ajaxdocumentid
Например, ваша форма отправки ajaxsubmit, если ваш обработчик addpoll.php в components/vxpolls/processors/web/addpoll.php, тогда ваше действие web/addpoll, компонент – vxpolls в форме добавляет эти переменные как скрытые
<form id="myForm" action="ajax"> <input type="hidden" name="action" value="web/addpoll" /> <input type="hidden" name="component" value="vxpolls" /> <-!какие-либо другие элементы формы!-> </form>
В моём случае я использую mootools javascript, поэтому мне нужно сделать вызов $(‘myForm’).send(); теперь моя форма отослана к ajax документу (посмотрите на action формы). Аjax страница просто отошлёт форму к core/components/vxpolls/web/addpoll.php.
Давайте разберём другой пример, где вы бы хотели получить данные о голосовании от backend/php с помощью ajax. Я подразумеваю, что вы возвращаете json данные
var jsonRequest = new Request.JSON({url: 'ajax', onSuccess: function(responce){
alert(responce.pollname)
}}).get({'action': 'web/getpoll', 'component': 'vxpolls'});
все js фреймворки поддерживают этот тип ajax функционала, посылая переменные в ajax url поэтому не волнуйтесь, если вы не используете mootools или если вы неуверены о том, как посылать данные от php файла в ответ на ajax запрос, смотрите сюда:
//фильтрация входящих данных
$poll=$modx->getObject('pollData',$_REQUEST['pid']);
if(!$poll){
return $modx->error->failure('no poll found with given id');
}
return $modx->error->success($poll->toArray());
Помните, что коннекторы лучше подходят для бекэнда, а не фронтэнда.
23-12-2011 AJAX Виктор Матушевский
Александр
25.12.2011 03:28Приветствую. А что если сделать вот так:
Создаем снипет в нем прописываем типа такого условия
if($_POST ){
if($_POST['submit']==''){
некоторые дейстия $row
if($row == 0) {
echo '';
}
exit;
}
}
добавляем этот снипет на текущую страницу на которой будут Аякс запросы и все шлем Аякс запросы на туже страницу на которой мы находимся. Вопрос как будет выглядеть безопасность сайта при таком подходе?
Александр
18.05.2014 09:58щщщ
Александр
18.05.2014 09:59лл