Añadir un botón «Volver» o «Cancelar» a los formularios de Drupal 7

2014-03-12 14.04.47

Añadir un botón que implemente una acción de «Cancelar» o «Volver» a un formulario de creación de contenidos en Drupal es bastante sencillo, con un par de funciones que podemos implementar en el fichero template.php de nuestra plantilla, o en un pequeño módulo personalizado:

<?php 
/**  * Implements hook_form_alter().  */ 
function modulename_form_alter(&$form, &$form_state, $form_id) {   
  // You might want to filter by content type.   
  if ($form_id == 'ctype_node_form') {     
    // Add a cancel button.     
    $form['actions']['cancel'] = array(       '#type'   => 'submit',
      '#value'  => t('Cancel'),
      '#access' => TRUE,
      '#weight' => 15,
      '#submit' => array('modulename_form_cancel', 'node_form_submit_build_node'),
      '#limit_validation_errors' => array(),
    );
  }
}

/**
 * Custom cancel button callback.
 */
function modulename_form_cancel($form, &$form_state) {
  $url = $_GET['destination'] ? $_GET['destination'] : 'choose/your/path';
  drupal_goto($url);
}

Las secciones a personalizar son:

  • form_id: será el formulario para el cual queremos implementar la comprobación.
  • ctype_node_form: aquí habrá que personalizar el nombre del tipo de contenido. Por ejemplo, pagina_node_form
  • modulename: aquí iría el nombre del módulo personalizado o la plantilla de Drupal

Una opción para añadirlo a cualquier formulario de creación de contenido es el siguiente código:

<?php 
/**  * Implements hook_form_alter().  */ 
function modulename_form_alter(&$form, &$form_state, $form_id) {   
  // You might want to filter by content type.   
  if (strpos($form_id, '_node_form') !== false ) {
    // Add a cancel button.     
    $form['actions']['cancel'] = array(       '#type'   => 'submit',
      '#value'  => t('Cancel'),
      '#access' => TRUE,
      '#weight' => 15,
      '#submit' => array('modulename_form_cancel', 'node_form_submit_build_node'),
      '#limit_validation_errors' => array(),
    );
  }
}

/**
 * Custom cancel button callback.
 */
function modulename_form_cancel($form, &$form_state) {
  $url = $_GET['destination'] ? $_GET['destination'] : 'choose/your/path';
  drupal_goto($url);
}

Vía | Gist en Github de Pascualduez.