MODx. AJAX

Думаю, рано или поздно, но все сталкивались с вопросом, а как же отправить ajax-запрос в MODx. Оказалось, что все очень просто!
Все, что нам потребуется: скрипт с ajax-запросом, сниппет, который будет принимать и обрабатывать данные этого запроса.
Разберем на примере.
Мне требовалось реализовать регистрацию ролика в конкурсе. Для этого:
  1. создаем чанк с формой registration и подключаем его в нужном месте макета/ресурса:
    <form id="form">
    <!-- тут код формы -->
    <input type="submit" id="submit" />
    </form>
    
  2. создаем чанк со скриптом 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;
    });
    
  3. создаем папку и в ней файл сниппета в папке 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;  
    ?>
    
На этом все :)

Комментарии

Популярные сообщения