Все привет, много уже было написано про обработку ajax запросов на фронтенд части сайта в MODx Revolution, есть даже несколько готовых дополнений.
В свою очередь, я хочу предложить ещё один, очень простой способ обработки ajax запросов в MODx Revolution.
Для начала создадим плагин под названием ajaxReqeust, со следующим содержимым:
Плагин должен срабатывать на системное событие «OnLoadWebDocument».
Данный плагин позволит нам выполнять ajax запросы к ресурсам и получать в ответ только содержимое, без шаблона.
Всё что от нас требуется — это сохранить нужный сниппет или чанк в контент ресурса.
В качестве примера, рассмотрим процесс обработки формы, отправленной посредством ajax запроса.
Создадим новый ресурс с любыми данными, в поле контент введём стандартный вызов сниппета FormIt:
Создадим небольшой сниппет под названием request, который позволит нам вывести сообщение, в случае успешной отправки формы:
Всё что нам осталось сделать — это подключить небольшой jQuery код в страницу, на которую будет выводиться форма.
Данный скрипт сабмитит форму посредством ajax запроса и обрабатывает полученный ответ:
Вот пожалуй и всё, просто не правда ли?
Больше ничего делать не нужно, никаких дополнительных скриптов, коннекторов и процессоров, всего один небольшой плагин, а обо всём остальном за нас позаботится MODx.
Чанки и сниппеты будут обрабатываться так, как это делается при обычных запросах, то есть никаких хаков для обработки тегов MODx не нужно, ответ прихо��ит уже обработанный парсером.
На этом всё, надеюсь моя небольшая статья сделает жизнь кому-то чуточку легче.
Удачи всем и до новых встреч.
В свою очередь, я хочу предложить ещё один, очень простой способ обработки ajax запросов в MODx Revolution.
Для начала создадим плагин под названием ajaxReqeust, со следующим содержимым:
<?php
if ($modx->event->name == 'OnLoadWebDocument') {
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$modx->resource->set('cacheable', 0);
$modx->resource->set('template', 0);
}
}
Плагин должен срабатывать на системное событие «OnLoadWebDocument».
Данный плагин позволит нам выполнять ajax запросы к ресурсам и получать в ответ только содержимое, без шаблона.
Всё что от нас требуется — это сохранить нужный сниппет или чанк в контент ресурса.
В качестве примера, рассмотрим процесс обработки формы, отправленной посредством ajax запроса.
Создадим новый ресурс с любыми данными, в поле контент введём стандартный вызов сниппета FormIt:
<div id="feedback_form">
<h2>Форма обратной связи</h2>
[[!request? &k=`success` &toPlaceholder=`success`]]
[[+success:is=``:then=`
[[!FormIt?
&hooks=`email,redirect`
&redirectTo=`[[*id]]`
&redirectParams=`{"success":"1"}`
&emailTpl=`feedbackEmailTpl`
&emailSubject=`Новый вопрос с сайта [[++site_name]]`
&emailTo=`info@unicontent-studio.ru`
&emailFrom=`noreply@unicontent-studio.ru`
&emailFromName=`[[++site_name]]`
&validate=`
name:required:stripTags,
email:email:required,
message:required:stripTags
`
&clearFieldsOnSuccess=`1`
&validationErrorMessage=`Возникли ошибки при отправке сообщения.`
]]
<form data-target="#feedback_form" class="ajax-form" action="[[~[[*id]]]]" method="POST">
<div>
<label>Имя:</label>
<input type="text" value="[[!+fi.name]]" name="name" />
[[!+fi.error.name]]
</div>
<div>
<label>E-mail:</label>
<input type="text" value="[[!+fi.email]]" name="email" />
[[!+fi.error.email]]
</div>
<div>
<label>Сообщение:</label>
<textarea name="message">[[!+fi.message]]</textarea>
[[!+fi.error.message]]
</div>
<input type="submit" name="submit" value="Отправить" />
</form>
`:else=`
<p>Ваше сообщение успешно отправлено.</p>
`]]
</div>
Создадим небольшой сниппет под названием request, который позволит нам вывести сообщение, в случае успешной отправки формы:
<?php
$result = isset($_REQUEST[$k])? strip_tags($_REQUEST[$k]) : '';
if (!empty($toPlaceholder)) {
$modx->toPlaceholder($toPlaceholder, $result);
}
else {
return $result;
}
Всё что нам осталось сделать — это подключить небольшой jQuery код в страницу, на которую будет выводиться форма.
Данный скрипт сабмитит форму посредством ajax запроса и обрабатывает полученный ответ:
$(document).ready(function() {
$('body').on('submit', '.ajax-form', function(e) {
e.preventDefault();
var target = this;
if ($(this).data('target') != undefined) {
target = $(this).data('target');
}
values = $(this).serializeArray();
$(this).find('input[type="submit"]').attr('disabled', 'disabled');
$.ajax({
type: 'POST',
dataType: 'html',
url: $(this).attr('action'),
data: values,
success: function(data) {
$(target).replaceWith(data);
}
});
});
});
Вот пожалуй и всё, просто не правда ли?
Больше ничего делать не нужно, никаких дополнительных скриптов, коннекторов и процессоров, всего один небольшой плагин, а обо всём остальном за нас позаботится MODx.
Чанки и сниппеты будут обрабатываться так, как это делается при обычных запросах, то есть никаких хаков для обработки тегов MODx не нужно, ответ прихо��ит уже обработанный парсером.
На этом всё, надеюсь моя небольшая статья сделает жизнь кому-то чуточку легче.
Удачи всем и до новых встреч.
