Redireccionar usuario después de agregar / editar nodo

13

Quiero redirigir a los usuarios a una página personalizada, después de que crean un nodo o lo editan.

Ousneo
fuente

Respuestas:

6

Puede usar hook_form_alterpara agregar un controlador de envío personalizado donde puede establecer la ruta de redireccionamiento.

Consulte la FAPI para obtener más detalles sobre la redirección de formularios.

googletorp
fuente
1
Gracias por tu respuesta ! He leído sobre el FAPI pero todavía tengo una pregunta que seguir: ¿Dónde debo poner la función hook_form_alter?
Ousneo
2
@ousneo En drupal 7 puede ponerlo en su tema o en un módulo personalizado que cree.
googletorp
1
consulte la respuesta de @Dmitry Vyal
Capi Etheriel el
1
Aquí hay un módulo que redirige después de guardar. drupal.org/project/node_save_redirect
polyclick
1
Si bien se acepta, esta respuesta es demasiado breve para ser útil. Realmente importa cómo agregue su controlador de envío personalizado, y esta respuesta no dice nada al respecto. La mejor respuesta en mi humilde opinión es la de @leymannx (pero vea por comentario sobre el caso de uso de edición).
Radical libre el
4

Puede crear una regla que redirija al usuario a cualquier página cuando cree o edite un tipo de contenido específico. Cuando agregue una regla, seleccione "Después de crear nuevo contenido", agregue también una condición de "El contenido tiene tipo". La sección You Do le dará la opción de redirigir a un usuario a la página que desee.

Para una redirección después de editar un nodo, simplemente cree una nueva regla y seleccione "Después de actualizar el contenido existente" como su primera opción.

kiamlaluno
fuente
Usé Reglas para redirigir después de crear un contenido específico, pero el usuario no recibe comentarios ahora. Quiero mostrarle al usuario que "Su contenido está creado". ¿Cómo puedo mejorar esto?
wallace740
1
Agregue otra acción después de la acción de redireccionamiento a "Mostrar un mensaje configurable en el sitio" y agregue su mensaje personalizado desde allí.
Agregué otra regla, pero creo que extraño algo en mi tema personalizado porque el mensaje no se muestra en mi página principal. ¡Estoy usando un módulo 'Mejores mensajes' para mostrar este tipo de mensajes en una ventana emergente! regla config
wallace740
Mi experiencia es que la superposición rompe las reglas de redireccionamiento, tenga cuidado.
Capi Etheriel
En mi caso, este formulario de agregar nodo estaba incrustado dentro de un panel. hook_form_alter no lo atrapó. ¡Pero las reglas funcionaron muy bien!
Druvision
2

Al hacer esto, asegúrese de desarmar también un posible destino existente que normalmente se agrega a la URL cuando hace clic en el botón editar para editar un nodo existente.

Vuelva a colocar articleen MYMODULE_form_article_node_form_alterla máquina nombre de su tipo de contenido.

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function MYMODULE_form_article_node_form_alter(&$form, &$form_state, $form_id) {

  $form['actions']['submit']['#submit'][] = '_MYMODULE_node_form_redirect';
}

/**
 * Submit callback.
 */
function _MYMODULE_node_form_redirect($form, &$form_state) {

  // Unset destination first.
  unset($_GET['destination']);
  unset($_REQUEST['edit']['destination']);

  $form_state['redirect'] = 'FOO/BAR';
}
leymannx
fuente
Esto funciona para redireccionamientos después de agregar un nodo, pero no después de editarlo. Entiendo que las llamadas a unsetla destinationse supone que debe manejar el caso de edición uso, pero no tienen ningún efecto en mi sitio de Drupal 7.
Radical libre el
@FreeRadical: tienes razón. Actualicé la respuesta para usar hook_form_BASE_FORM_ID_alter en su lugar, que apunta a ambos: agregar y editar.
leymannx
@FreeRadical - Información adicional: Diferencia entre crear un nodo nuevo y editar en forma alter .
leymannx
1

La documentación no es muy clara, pero debe modificar la $_GET['destination']variable, no $_REQUESTo $form_state['redirect'].

Dmitry Vyal
fuente
1
Modificar $ form_state ['redirect'] funciona bien en Drupal 7 ...
Felix Eve
1

en Drupal 7 puede alterar el formulario de edición de nodo para 'adjuntar' su propia función de envío, en la que puede modificar form_state del formulario de confirmación de eliminación de nodo para incluir el parámetro 'destino' ... acabo de hacer esto en un tema personalizado i ' se ha desarrollado como un subtema del tema de administración 'siete' ...

Documentación para hook_form_FORM_ID_alter

Puede agregar este gancho a una plantilla / tema, no solo a los módulos.

así que en su tema template.php, agregue este formulario alter hook:

function yourtheme_node_delete_form_submit( &$form, &$form_state ) {
    $form_state[ 'redirect' ][ 1 ][ 'query' ][ 'destination' ] = "admin/content";
}

y luego voila. ya no se redirige a la página de inicio después de eliminar un nodo.

kris
fuente