Formulario de edición de perfil

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
grone2013's picture

Saludos amigos y de antemano gracias por la ayuda.

El formulario de edición de perfil de usuario tiene un identificador 'user_profile_form' y una función controladora del envío 'user_profile_form_submit'. Por medio del hook_form_alter hago que el botón de guardar tenga un comportamiento ajax y asigno como callback de la conexión ajax la función 'user_profile_form_submit' que se puede ver en este enlace https://api.drupal.org/api/drupal/modules%21user%21user.pages.inc/functi... y es del core de drupal. No funciona el envío.

function mymodule_form_alter(&$form, &$form_state, $form_id) {

if($form_id == 'user_profile_form') {
    $form['actions']['submit']['#ajax'] = array(
        'callback' => 'user_profile_form_submit',
    );
}

}

No se como hacer el envío del formulario de edición de usuario de forma AJAX.

Gracias por la ayuda que me puedan brindar.

Comments

Siempre que he trabajado con

juankvillegas's picture

Siempre que he trabajado con formulario con AJAX, al elemento #ajax le agrego 2 atributos: callback y wrapper.

El callback se ejecuta y al final retorna diferentes cosas: un html, o un arreglo renderizable, o un listado de comandos ajax, en fin... en el api se explica bien cómo funciona el callback.

El wrapper indica en qué parte de la página se va a meter el contenido que retorna el callback.

La función user_profile_form_submit no retorna nada, pero además, como no hay un wrapper definido, yo creo que por eso ni siquiera aparece el mensaje que retorna la función.

Acabo de intentar hacer lo

jedihe's picture

Acabo de intentar hacer lo mismo (+ pequeños ajustes, como los sugeridos por juankvillegas) y me funcionó bien.

Este es todo el código que escribí:

<?php
function <mi_modulo>_form_alter(&$form, &$form_state, $form_id) {
  if (
$form_id === 'user_profile_form') {
   
$form['actions']['submit']['#ajax'] = array(
     
'callback' => '<mi_modulo>_user_profile_form_callback',
     
'wrapper' => 'user-profile-form',
    ); 
  }
}

function <
mi_modulo>_user_profile_form_callback($form, $form_state) {
  return
$form;
}
?>

Al hacer clic en "Save", veo la animación de AJAX junto al botón, luego se refresca y obtengo hasta el mensaje de que se guardó bien. Cuando refresco con F5 los campos que cambié mantienen los cambios correctamente.

Algo que me confundió cuando hice mi primer formulario con #ajax es que pensé que el callback reemplazaba al submit, pero no es así: los #submit's del form se siguen invocando tal cual, el callback sólo es un paso extra que se usa para enviar HTML (para reemplazar o agregar) o comandos de AJAX para ser procesados en el browser.

Latin America

Group categories

Latin America

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: