Saltar al contenido

Drupal – Cómo redirigir a una página después de enviar un formulario

Este equipo de expertos luego de ciertos días de investigación y recopilar de datos, dieron con la solución, nuestro deseo es que resulte útil para ti en tu trabajo.

Solución:

En el controlador de envío que haces

Drupal 7:

$form_state['redirect'] = 'url';

Drupal 8:

$form_state->setRedirect('route', $args, $options);
$form_state->setRedirectUrl(DrupalCoreUrl);

Cabe señalar que hay varios factores desencadenantes que pueden evitar una redirección:

  • $form_state['redirect'] === FALSE: si se establece, la función de creación de formularios o el controlador de validación/envío de formularios no desea que se redirija a un usuario, lo que significa que drupal_goto() no se invoca. Para la mayoría de los formularios, la lógica de redirección será la misma independientemente de si $form_state['redirect'] es indefinido o FALSO. Sin embargo, en caso de que no se haya definido y la solicitud actual contenga una consulta de ‘destino’ string, drupal_goto() se redirigirá a ese destino dado en su lugar. Solo ajuste $form_state['redirect'] a FALSE evitará cualquier redirección.
  • $form_state['no_redirect'] === TRUE: cuando se establece, la devolución de llamada que creó originalmente el formulario rechaza explícitamente cualquier redirección, independientemente del valor de redirección en $form_state['redirect']. Por ejemplo, ajax_get_form() define $form_state['no_redirect'] al crear un formulario en una devolución de llamada AJAX para evitar cualquier redirección. $form_state['no_redirect'] NO debe ser alterado por las funciones del creador de formularios o los controladores de validación/envío de formularios.
  • $form_state['programmed'] === TRUE: significa que el envío del formulario generalmente se invocó a través de drupal_form_submit()por lo que cualquier redirección rompería el script que invocó drupal_form_submit().
  • $form_state['rebuild'] === TRUE: significa que el formulario debe reconstruirse sin redirección.

Para Drupal 7, probé esto en un módulo personalizado y funciona. También se puede utilizar en un tema:

function my_theme_form_alter(&$form, &$form_state, $form_id) 
  if ($form_id == 'contact_site_form') 
    $form['#submit'][] = 'contact_form_submit_handler';
  


function contact_form_submit_handler(&$form, &$form_state) 
  $form_state['redirect'] = 'thank-you-page-alias';

Por cierto, encontré este fragmento aquí: https://gist.github.com/postrational/5768796

Si te animas, tienes la opción de dejar un post acerca de qué le añadirías a esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *