Я создал тип контента с именем "главное меню". У меня есть несколько списков выбора, которые зависят друг от друга. Я хотел отобразить другой список, когда установлены разные флажки. Я понял, что мне нужно использовать Ajax для редактирования формы, чтобы добиться этого, но может кто-нибудь сказать мне, как использовать Ajax с hook_form_alter?
Идентификатор формы, которую я должен редактировать, - это main_menu_node_form. Когда я пытаюсь получить доступ к этой форме с помощью hook_form_alter()
и добавить #ajax
свойство полей формы, мне кажется, что я не могу этого сделать, поскольку поля уже отрисованы до того, как дескриптор будет передан hook_form_alter()
. Может кто-нибудь, пожалуйста, помогите мне решить эту проблему?
Примечание. Я создал тип контента с помощью hook_install()
.
function main_menu_content_type_form_main_menu_node_form_alter(&$form, &$form_state, $form_id) {
dpm($form);
dpm($form_state);
$form['field_mlnk'] = array(
'#ajax' => array(
'callback' => 'main_menu_content_type_form_main_menu_node_form_alter_callback',
'wrapper' => 'link-div',
'method' => 'replace',
'effect' => 'fade',
),
);
}
hook_form_alter()
(как вы писали: «Когда я пытаюсь получить доступ к этой форме, используя форму alter [… […]»).main_menu_content_type_form_main_menu_node_form_alter_callback()
; если эта функция содержит неправильный код, пользователи не могут сообщать о любых изменениях, которые вы должны внести в свой код, чтобы заставить его работать.Ответы:
Я мог бы дать вам некоторую подробную информацию о том, что вы делаете неправильно с hook_form_alter, если бы вы включили некоторый фактический код из вашего пользовательского модуля. Однако, поскольку вы не предоставляете никаких подробностей, вы можете посмотреть видео: Как создавать красивые формы в Drupal 7 (обратите внимание, что я ввел URL-адрес, чтобы он начинался в тот момент, когда описывается ajax). Примерно 5 минут просмотра этого, вероятно, дадут вам ответ на ваш вопрос (поскольку он точно описывает, как использовать ajax с hook_form_alter), но если вы действительно нетерпеливы, реальный код показан где-то здесь .
Если вы хотите увидеть живой, хорошо протестированный и документированный пример формы, изменяемой с помощью ajax, есть один в модуле примеров . Вы можете найти фактический хук здесь и функцию обратного вызова здесь .
Надеюсь, это поможет. Если этого не произойдет, дайте нам дополнительную информацию о вашем коде, и мы сможем точно сказать вам, что вы делаете неправильно.
источник