Всем привет ).
Пытаюсь решить простую задачу, но результат довольно странный:
В форме редактирования ноды, необходимо динамически изменять содержимое элемента типа select в зависимости от
состояния выбранной радио-кнопки, т.е. в список выбора подгружается соответствующий набор данных.
Использование ajaх — принципиальный момент, т.к. форму перезагружать не хотелось бы.
<?php
/**
* Implements hook_form_FORM_ID_alter().
*/
function UI_custom_form_task_node_form_alter(&$form, &$form_state) {
// Требуется модифицикация поля field_user (тот самый список)
// блок кнопок выбора типа списка
$form['users'] = array(
'#type' => 'radios',
'#title' => 'Состав исполнителей',
'#options' => array(
'group' => 'Группа',
'all' => 'Все',
),
'#default_value' => 'group',
'#required' => true,
'#ajax' => array(
'callback' => 'UI_custom_users_list',
'event' => 'click',
),
);
/*
.... начинка формы, к делу не относится
*/
return $form;
}
/*
* заполнение списка в зависимости от нажатой кнопки
*/
function UI_custom_users_list(&$form, &$form_state) {
debug('call UI_custom_users_list');
// заполнение требуемого поля
$usr=&$form['field_user']['und']['#options'];
$usr=array();
// чем собственно и заполняем — на выходе функции массив
$usr=taxonomy_by_role_load_group('voc_by_role_5', 197); // тест для dh, uid=197
$form_state['rebuild'] = TRUE;
}
?>
Проблема в том, что и ajax вроде бы отрабатывает, но вот вызывается ли функция заполнения поля списка UI_custom_users_list — не ясно.
Вызов debug не отображается и как понять вообще, выполняется ли операция, передаются ли данные в поле?
Пробовал разные варианты событий (click, mousedown etc). Возможно есть другой путь решения.
Был еще вариант использовать авто-submit формы с помощью ctools_add_js('auto-submit'), но это стрельба из пушки по воробьям, ибо форму отправлять на этом шаге (выбор содержимого поля) не требуется.
Подскажите, пожалуйста, как заставить работать эту конструкцию? )
Комментарии
вдумчиво покурите http://drupal.org/node/752056
спасибо ), пошёл следовать совету
Есть хороший блог о Друпале - http://xandeadx.ru/
Там есть также и публикации об Ajax.
boatsman — Еще раз спасибо, помогло ). Налицо было непонимание основных принципов.
roman-yrv — Благодарю ), Вы правы — очень хороший блог, читаю его
чуть ли не самого начала знакомства с drupal (а оно недавнее