Botón de "cancelar" en el formulario de añadir o editar contenido

Botón de "cancelar" en el formulario de añadir o editar contenido

Hoy me he encontrado con este problema, necesitaba implementar un botón de cancelar para los formularios de crear y editar, de determinados tipos de contenido. Una vez más, el problema ya estaba  resuelto por la comunidad ( gracias Bagz ) y ahora me dispongo a compartir con vosotros. En primer lugar debemos editar el archivo template.php de nuestro theme. Es acosajable utilizar sub-themes para realizar nuestras modificaciones sin cerrarnos la puerta a actualizaciones del theme original, y al mismo tiempo fijarse bien en que theme utilizamos para la crear o editar contenido, ya que probablemente no será el mismo que utilicemos para la parte pública de la página, y el que debemos de modificar es el que se utilice para crear y editar conenido (podemos comprobar la configuración en example.com/admin/appearance, en el apartado Tema de administración)

Lo que tenemos que hacer es añadir al template.php el hook hook_form_FORM_ID_alter que en nuestro caso, se llamará MI_PLANTILLA_form_TIPO_CONTENIDO_node_form_alter, por ejemplo, si el tipo de contenido es article, nuestra función quedaría así :

function MI_PLANTILLA_form_article_node_form_alter(&$form, &$form_state, $form_id){
  $form['actions']['cancel'] = array(
        '#type' => 'button',
        '#value' => t('Cancel'),
        '#prefix' => '     ',
        '#weight' => 99,
        '#attributes' => array('onClick' => 'history.go(-1); return true;'),
        '#post_render' => array('change_button_type'),
  );
}

De esta manera modificamos el array $form, añadiendo un botón en la misma zona que el resto de botones, mediante el cual al hacer click retrocedemos en el histórico del navegador. El único problema, es que aunque pongamos "#type" => "button", a la hora de pintar el botón, drupal nos pone type="submit", por lo añadimos el #post_rener (función de callback) para modificar el código html resultante, y así forzar el type="button", evitando así que el formulario se envíe al pinchar en "cancelar"

function change_button_type($markup, $element) {
    $markup = str_replace('type="submit', 'type="button', $markup);
    return $markup;
}

 

Por último no olvidéis borrar cache, como cada vez que añadimos un nuevo hook, para que drupal detecte las nuevas funciones que acabamos de implementar.

 

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
CAPTCHA
Esta pregunta es para evitar el envío automático de spam