Существующие команды
В друпале по умолчанию есть некоторый список команд:
- 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')
)
);
}
Полезные ссылки
- Документация по Ajax фреймворку (англ)
- Список Ajax-команд (англ)
- Правильные ajax запросы в Drupal 7 (рус)