¿Cómo usar Ajax en forma alter en Drupal 7?

8

He creado un tipo de contenido llamado "menú principal". Tengo pocas listas seleccionadas que dependen unas de otras. Quería mostrar una lista diferente cuando se seleccionan diferentes casillas de verificación. Descubrí que necesito usar Ajax para editar el formulario para lograrlo, pero ¿alguien puede decirme cómo usar Ajax con hook_form_alter?

La identificación del formulario que se supone que debo editar es "main_menu_node_form". Cuando trato de acceder a este formulario usando hook_form_alter()y agrego la #ajaxpropiedad de los campos del formulario, parece que no puedo hacerlo ya que los campos ya se representan antes de pasar el identificador hook_form_alter(). ¿Alguien puede ayudarme a resolver esto?

Nota: He creado el tipo de contenido usando 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',
    ),
  );
}
Desarrollador Drupal
fuente
1
Sería útil ver el código del formulario que está tratando de modificar y el código que está utilizando para modificarlo.
kiamlaluno
@kiamlaluno He creado un tipo de contenido main_menu usando la función hook_install. Quería mostrar campos al agregar contenido de acuerdo con la selección realizada en las listas. ¿Debo agregar las propiedades ajax en hook_install o en Hook_form_alter?
Drupal Developer
Aún así, sería útil ver el código que está utilizando hook_form_alter()(como escribió, "Cuando intento acceder a este formulario utilizando el formulario alter [... [...]").
kiamlaluno
@kiamlaluno He agregado el fragmento de código a mi pregunta. Por favor, vea eso y dígame si el código funciona o no.
Drupal Developer
Sería perfecto si mostraras también el código para main_menu_content_type_form_main_menu_node_form_alter_callback(); Si esa función contiene código incorrecto, los usuarios no pueden informar los cambios que debe realizar en su código para que funcione.
kiamlaluno

Respuestas:

7

Podría proporcionarle información detallada sobre lo que está haciendo mal con hook_form_alter si incluye algún código real de su módulo personalizado. Sin embargo, dado que no está dando ningún detalle, puede ver el video: Cómo construir hermosos formularios en Drupal 7 (tenga en cuenta que ingresé la URL para que comience en el momento en que se describe el ajax). Aproximadamente 5 minutos de ver esto probablemente le dará la respuesta a su pregunta (ya que describe exactamente cómo usar ajax con hook_form_alter), pero si es realmente impaciente, el código real se muestra en algún lugar por aquí .

Si desea ver un ejemplo en vivo, bien probado y documentado de un formulario modificado con ajax, hay uno en el módulo Ejemplos . Puede encontrar el enlace real aquí y la función de devolución de llamada aquí .

Espero que esto ayude. Si no es así, dénos más información sobre su código y podremos decirle exactamente qué está haciendo mal.

F1234k
fuente
@ F123K Quería alterar los campos existentes en el formulario en lugar de agregar un nuevo campo al formulario. Así que por favor dime cómo se podría hacer eso.
Drupal Developer
Publicación editada con un gancho de muestra y la función de devolución de llamada.
F1234k