Как создать свою ajax-команду

Опубликовал Максим Баев, 26 октября 2014, 13:43

Существующие команды

В друпале по умолчанию есть некоторый список команд:

  • ajax_command_alert
  • ajax_command_insert
  • ajax_command_replace
  • ajax_command_html
  • ajax_command_prepend
  • ajax_command_append
  • ajax_command_after
  • ajax_command_before
  • ajax_command_remove
  • ajax_command_changed
  • ajax_command_css
  • ajax_command_settings
  • ajax_command_data
  • ajax_command_invoke
  • ajax_command_restripe
  • ajax_command_update_build_id

Многие из которых соответствуют jQuery функциям соответственно. Здесь стоит выделить команду ajax_command_invoke потому, что она позволяет выполнять любую jQuery функцию. Например, если мы вернём

<?php
ajax_command_invoke('#some-selector', 'fadeOut', array(666));

то javascript выполнит:

jQuery('#some-selector').fadeOut(666);

Подробнее можно узнать на д.орг

Модуль ctools пополняет список 4-мя командами:
  • ctools_ajax_command_attr
  • ctools_ajax_command_redirect
  • ctools_ajax_command_reload
  • ctools_ajax_command_submit

Свои команды

Но бывают случаи когда обойтись командой ajax_command_invoke не получается или это не рационально, к примеру, когда нужно выполнить несколько функций. Для этого разработчики Drupal предлагают написать свою команду.

Пример:

(function($){
  /**
   * Custom drupal command
   */
  Drupal.ajax.prototype.commands.custom_command = function (ajax, response, status){
    if (status === 'success'){
      console.log(response);
      alert(1);
    }
  };
})(jQuery);

Такую команду можно будет вызвать так:

<?php
function my_module_some_ajax_callback(){
  return array(
    '#type'     => 'ajax',
    '#commands' => array(
      // our command here
      array('command' => 'custom_command')
    )
  );
}

Полезные ссылки

Другие посты