Возможно тему сформулировал некоректно!
Задача состоит в следующем, есть самописный модуль, который строит в боковой колонке форму. Хочется доработать логику и сделать при определенных комбинациях полей, у select list некоторые option - disabled.
Например получить такой html:
Плюс ко всему хочется всяких украшательств, типа jquery плагина для замены селект листа, на констуркцию из html елементов которые можно темизировать.
Для всего этого необходимо, чтобы после ajax обновления формы, вызывался кастомный javascript код.
Лазил целый день, но так и не нашел информации, как сделать javascript callback после выполнения form ajax callback
Любые идеи с радостью выслушаю.
Комментарии
Тут читаете https://api.drupal.org/api/drupal/includes!ajax.inc/group/ajax/7
Тут скачиваете примеры https://drupal.org/project/examples
В двух словах в функции которая указана как callback, должно быть примерно следующее
<?php
$commands = array();
$commands[] = ajax_command_replace(NULL, $output);
$commands[] = ajax_command_prepend(NULL, theme('status_messages'));
return array('#type' => 'ajax', '#commands' => $commands);
?>
Собственно то, что вы запихаете в массив $commands будет выполнено на стороне клиента.
Тут набор готовых функций, которые можно использовать - https://api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax_commands/7
Но если того, что уже есть не хватает, можно написать свой клиентский код. А то, как его вызывать подглядеть в реализации drupal.
UPD: есть вот такой ресурс http://xandeadx.ru/ там много полезного. В частности по вашему вопросу там есть вот что http://xandeadx.ru/blog/drupal/492
Вообще посмотрите там статьи по этому адресу http://xandeadx.ru/search/node/%24commands (сам не смотрел, но наверное там будет для вас полезного)
С материалами приведенными по ссылкам знаком, блог андеда читаю давно.
Засунуть $commands в callback функцию не додумался. Сейчас поиграюсь, и отпишусь, что получилось.
я тоже думаю, что надо отключить некоторые пункты через комманды аякса.
Сработал вариант с commands[]:
<?php
$commands[0] = array();
..........
for ($i=1; $i<n; $i++) {
$id_element = '.form-item-name-field option:nth-child('. $i .')';
$commands[] = ajax_command_invoke($id_element, 'attr', array(array('disabled' => 'disabled')));
}
..........
$commands[0] = ajax_command_replace('#some-id', drupal_render($form['wrapper']));
return array('#type' => 'ajax', '#commands' => $commands);
?>
Обновляется html на странице, а потом выполняется javascript, заданный command[].