MODx. AJAX
Думаю, рано или поздно, но все сталкивались с вопросом, а как же отправить ajax-запрос в MODx. Оказалось, что все очень просто!
Все, что нам потребуется: скрипт с ajax-запросом, сниппет, который будет принимать и обрабатывать данные этого запроса.
Разберем на примере.
Мне требовалось реализовать регистрацию ролика в конкурсе. Для этого:
Все, что нам потребуется: скрипт с ajax-запросом, сниппет, который будет принимать и обрабатывать данные этого запроса.
Разберем на примере.
Мне требовалось реализовать регистрацию ролика в конкурсе. Для этого:
- создаем чанк с формой registration и подключаем его в нужном месте макета/ресурса:
<form id="form"> <!-- тут код формы --> <input type="submit" id="submit" /> </form>
- создаем чанк со скриптом script (или же просто подключаем скрипт в макете):
$('#button').live('click', function(){ $.ajax({ url: 'assets/snippets/video/ajax.php', type: 'POST', dataType: 'json', data: $('#form').serialize(), success: function(data){ if (data.state) { alert(data.message); } else { // обрабатываем пришедшие ошибки } }, error: function() { alert('Ошибка отправки данных'); } }); return false; });
- создаем папку и в ней файл сниппета в папке assets/snippets/ (у меня это assets/snippets/video/ajax.php):
<?php require_once dirname(__FILE__).'/../../../manager/includes/config.inc.php'; include_once(MODX_MANAGER_PATH.'/includes/document.parser.class.inc.php'); define('MODX_API_MODE', true); $modx = new DocumentParser; $modx->db->connect(); $modx->getSettings(); $name = isset($_POST['name']) ? $modx->db->escape($_POST['name']) : ''; // аналогично получаем остальные переменные из массива $_POST $errors = array(); /********************** * здесь проводим валидацию данных и записываем ошибки **********************/ // если ошибки найдены if (count($errors)) { echo json_encode(array('state'=>0, 'message'=>implode('<br/>', $errors))); exit; } // сохраняем данные $values = array(); $values['name'] = $name; // ... $newId = $modx->db->insert( $values, $modx->getFullTableName('video') ); echo json_encode(array('state'=>1, 'message'=>'')); exit; ?>
Комментарии
Отправить комментарий