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

mbaev 26.10.2014, 12: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 функцию. Например, если мы вернём

  1. ajax_command_invoke('#some-selector', 'fadeOut', array(666));

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

  1. 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 предлагают написать свою команду.

Пример:

  1. (function($){
  2.   /**
  3.    * Custom drupal command
  4.    */
  5.   Drupal.ajax.prototype.commands.custom_command = function (ajax, response, status){
  6.     if (status === 'success'){
  7.       console.log(response);
  8.       alert(1);
  9.     }
  10.   };
  11. })(jQuery);

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

  1. function my_module_some_ajax_callback(){
  2.   return array(
  3.     '#type'     => 'ajax',
  4.     '#commands' => array(
  5.       // our command here
  6.       array('command' => 'custom_command')
  7.     )
  8.   );
  9. }

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