Создаем пользовательскую AJAX команду

Сегодня я покажу, как правильно создавать пользовательские AJAX команды. В качестве примера, я создам команду, которая будет менять цвет ссылок. Команда будет называться color_links.

Для начала в своем модуле в *.js файле создаем команду:

(function($) {

  /**
   * Command to change color of links.
   */
  Drupal.ajax.prototype.commands.color_links = function(ajax, response, status) {
    var wrapper = response.selector;
    var hex = response.hex;

    $(wrapper).find("a").css({ color : hex });
  }
})(jQuery);

Далее в *.module создаем команду:

/**
 * Creates a Drupal Ajax 'color_links' command.
 *
 * This command is implemented by Drupal.ajax.prototype.commands.color_links().
 *
 * @param $selector
 *   A jQuery selector string.
 * @param $hex
 *   The hex value.
 *
 * @return array
 *   An array suitable for use with the ajax_render() function.
 */
function example_command_color_links($selector, $hex) {
  return array(
    'command' => 'color_links',
    'selector' => $selector,
    'hex' => $hex,
  );
}

Пример использования:

/*
 * Change color of links.
 */
function example_color_links_ajax_callback() {
  $commands = array();
  $hex = '#ff0000';
  $commands[] = example_command_color_links('ul.primary-links', $hex);
  return array('#type' => 'ajax', '#commands' => $commands);
}

P.S. Не забываем подключать js перед использованием.

Комментарии (3)

Аватар пользователя Андрей
Андрей

Етить-калатить! То, что мне и надо!
СПАААСИИИБОООО!!!! ))))
(Лучше поставить вместо капчи honeypot)

Аватар пользователя Дмитрий
Дмитрий

Добрый вечер. не совсем понимаю как это все работает. Программно создаю страницу и вывожу на нее пункты меню. потом подключаю js из примера и добавляю функции. но в итоге никакого эффекта. не подскажете что я делаю не так?

Аватар пользователя Benya
Benya

Вам нужно разобраться как работает AJAX в друпал. Предполагаю, вы делаете что то не так