Drupal → Описание команд AJAX-фреймворка

01.12.2011

ajax_command_after($selector, $html, $settings = NULL)

Вставляет содержимое $html после элемента с селектором $selector используя jQuery метод after().

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

$commands[] = ajax_command_after('#page-title', '<h2>Some subtitle</h2>');

ajax_command_alert($text)

Выводит алерт с текстом $text используя нативную javascript функцию alert().

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

$commands[] = ajax_command_alert('This alert message');

ajax_command_append($selector, $html, $settings = NULL)

Добавляет содержимое $html в конец элемента с селектором $selector используя jQuery метод append().

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

$commands[] = ajax_command_append('body', '<div>Footer message</div>');

ajax_command_before($selector, $html, $settings = NULL)

Добавляет содержимое $html перед элементом с селектором $selector используя jQuery метод before().

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

$commands[] = ajax_command_before('#page-title', '<div>Page title:</div>');

ajax_command_changed($selector, $asterisk = '')

Добавляет к элементам с селектором $selector класс ajax-changed.

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

$commands[] = ajax_command_changed('input[name="title"]');

ajax_command_css($selector, $argument)

Меняет css свойства элемента с селектором $selector используя jQuery метод css().

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

$commands[] = ajax_command_css('input[name="title"]', array('background' => 'red'));

ajax_command_data($selector, $name, $value)

Изменяет внутренние данные элемента с селектором $selector используя jQuery метод data().

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

$commands[] = ajax_command_data('.node', 'nid', '123');

ajax_command_html($selector, $html, $settings = NULL)

Изменяет содержимое элемента с селектором $selector на $html используя jQuery метод html().

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

$commands[] = ajax_command_html('#page-title', 'New page title');

ajax_command_invoke($selector, $method, array $arguments = array())

Выполняет jQuery метод $method для элемента с селектором $selector.

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

$commands[] = ajax_command_invoke('input[name="title"]', 'addClass', array('error'));

ajax_command_prepend($selector, $html, $settings = NULL)

Вставляет содержимое $html в начало элемента с селектором $selector используя jQuery метод prepend().

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

$commands[] = ajax_command_prepend('#page-title', 'Drupal: ');

ajax_command_remove($selector)

Удаляет элемент с селектором $selector используя jQuery метод remove().

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

$commands[] = ajax_command_remove('.message');

ajax_command_replace($selector, $html, $settings = NULL)

Заменяет элемент с селектором $selector на содержимое $html используя jQuery метод replaceWith().

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

$commands[] = ajax_command_replace('#page-title', '<h1 id="page-title">New page title</h1>');

ajax_command_restripe($selector)

Обновляет классы odd/event у строк таблицы с селектором $selector. Применяется после изменения таблиц.

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

$commands[] = ajax_command_restripe('table.ajax-table');

ajax_command_settings($argument, $merge = FALSE)

Настройки, которые будут переданы в Drupal.attachBehaviors.

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

$setting['ajax_forms_test']['foo'] = 42;
$commands[] = ajax_command_settings($setting);

Как создавать свои команды.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Андрей
22.07.2012, 15:11

А что если нужно выполнить цепочку связанных команд. Например первая команда делает что-то и получает результат, а вторая команда делает что-то уже с этим результатом..

к примеру:

$("#example_j span").clone().prependTo("#example_j p");

Игорь
22.11.2012, 20:11

Подскажите, как получить содержимое селектора?
А то метод только вставляет.
ajax_command_html($selector, $html, $settings = NULL) - в jquery может как получить так и вставить html, а как здесь быть?

никак. команды работают только в одну сторону

Игорь
22.11.2012, 23:56

Сам увидел то что надо - в '#ajax' => 'callback' там же в функцию передаются: function ($form, $form_state)
$form_state['values'] - все данные формы
Написал модуль - 3-и функции - добавляет к Localization client кнопку "yandex translate"
То есть когда нужно перевести строку
1. выбираем строку
2. нажимаем скопировать
3. нажимаем yandex translate для автоперевода
4. нажимаем сохранить.
http://ssvm.ru/sites/default/files/modules/yandex_translate.zip

как мне на колбэке поля формы убить вюшку
function ajax_example_callback($form, &$form_state) {
$form = array();
ajax_command_html('.content', '', $settings = NULL);
ajax_command_replace('.content', ' ', $settings = NULL);
$commands[] = ajax_command_remove('.content');

Пытаюсь через ajax_command_settings отправить то, что вы описали в статье Hierarchical Select на AJAX, а именно отправить return $form['terms'];

Всяко уже пытался, но никак не получается. Или я ошибся и здесь нужен другой метод?

Заработало вот так. Рендерить форму можно прямо в callback функции :)

function ajax_district_select_callback($form, &$form_state) {
  $html = ajax_get_result_callback($form, $form_state);
  $commands[] = ajax_command_replace('#result_sort', $html);
  $commands[] = ajax_command_replace('#district_select', render($form['district_sort']));
  $elements['#type'] = 'ajax';
  $elements['#commands'] = $commands;
  return $elements;
}

Если командой ajax_command_html происходит вставка не в блок div, nj тогда по умолчанию все в него обернется.

Чтобы этого не было, нужно использовать ajax_command_invoke($selector, 'html', array('content'))

Виктор
24.03.2015, 04:34

Здравствуйте.такой вопрос: сделал добавление материала из блока через аякс,без перезагрузки страницы.Материал добавляется,однако есть проблема-форма остается заполненной,и не дает сразу добавить следующий материал.приходится перегружать страницу.

как сбросить форму?

ajax_command_replace(селектор-формы, html-формы)
Гость
10.06.2015, 15:33

ajax_command_settings() хоть и передаёт команды но при первом срабатывании аякса его нет. Только при втором срабатывании. Может я чтото не так делаю?
Отправлял через ajax.eventResponse(ajax, {});
принимаю settings.stopWatch то stopWatch не доступен т.к нет его ещё

function test_form($form, &$form_state) {
//...
$form['tasks']['task_update'] = array(
        '#type'=>'button',
        '#value' => 'Обновить',
        '#ajax' => array(
              'callback' => 'task_add_more_tasks',
        ),
    );
//...
}

function task_add_more_tasks($form, &$form_state){
    $state = new stdClass();
    $state->tasks = get_tasks();
    foreach ($state->tasks as $key=>&$task){
       //формируем сложный объект 
    }
    $settings['test_form']=$state;
    $commands[] = ajax_command_settings($settings, TRUE);
    return array('#type' => 'ajax', '#commands' => $commands);

}

Добавить комментарий