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лл