Как использовать Ajax в форме изменения в Drupal 7?

8

Я создал тип контента с именем "главное меню". У меня есть несколько списков выбора, которые зависят друг от друга. Я хотел отобразить другой список, когда установлены разные флажки. Я понял, что мне нужно использовать 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',
    ),
  );
}
Drupal Developer
источник
1
Было бы полезно увидеть код формы, которую вы пытаетесь изменить, и код, который вы используете для его изменения.
kiamlaluno
@kiamlaluno Я создал тип контента main_menu, используя функцию hook_install. Я хотел отображать поля при добавлении контента в соответствии с выбором, сделанным в списках. Должен ли я добавить свойства ajax в hook_install или в Hook_form_alter.
Drupal Developer
Тем не менее, было бы полезно увидеть код, для которого вы используете hook_form_alter()(как вы писали: «Когда я пытаюсь получить доступ к этой форме, используя форму alter [… […]»).
kiamlaluno
@kiamlaluno Я добавил фрагмент кода в свой вопрос. Пожалуйста, посмотрите это и скажите мне, работает ли код или нет.
Drupal Developer
Было бы идеально, если бы вы показали также код для main_menu_content_type_form_main_menu_node_form_alter_callback(); если эта функция содержит неправильный код, пользователи не могут сообщать о любых изменениях, которые вы должны внести в свой код, чтобы заставить его работать.
kiamlaluno

Ответы:

7

Я мог бы дать вам некоторую подробную информацию о том, что вы делаете неправильно с hook_form_alter, если бы вы включили некоторый фактический код из вашего пользовательского модуля. Однако, поскольку вы не предоставляете никаких подробностей, вы можете посмотреть видео: Как создавать красивые формы в Drupal 7 (обратите внимание, что я ввел URL-адрес, чтобы он начинался в тот момент, когда описывается ajax). Примерно 5 минут просмотра этого, вероятно, дадут вам ответ на ваш вопрос (поскольку он точно описывает, как использовать ajax с hook_form_alter), но если вы действительно нетерпеливы, реальный код показан где-то здесь .

Если вы хотите увидеть живой, хорошо протестированный и документированный пример формы, изменяемой с помощью ajax, есть один в модуле примеров . Вы можете найти фактический хук здесь и функцию обратного вызова здесь .

Надеюсь, это поможет. Если этого не произойдет, дайте нам дополнительную информацию о вашем коде, и мы сможем точно сказать вам, что вы делаете неправильно.

F1234k
источник
@ F123K Я хотел изменить существующие поля в форме, а не добавлять новое поле в форму. Поэтому, пожалуйста, скажите мне, как это можно сделать.
Drupal Developer
Сообщение отредактировано с помощью образца хука и функции обратного вызова.
F1234k