forms – ¿Cómo puedo agregar un botón de cancelación al formulario de agregar contenido para un solo tipo de contenido?

Pregunta:

Tengo varios tipos de contenido en un sitio y la mayoría de ellos son editables por el usuario pero no creables por el usuario. Sin embargo, un tipo de contenido, Imagen , permite a los usuarios cargar una imagen. A veces, sin embargo, los usuarios cargan la imagen incorrecta y entran en pánico porque no quieren que esa imagen se envíe al sitio.

Por supuesto, siempre pueden presionar el botón Atrás del navegador, pero me gustaría agregar un botón Cancelar para mayor seguridad.

Encontré este hilo que ofrece varias soluciones para agregar botones de cancelación en Drupal.org , así como esta solicitud de función para agregar un botón de cancelación a D8 . Sin embargo, hay varios enfoques generales diferentes y no sé cómo limitar uno a un tipo de contenido determinado (en este caso, my_image).

Respuesta:

Usaría el siguiente código.

function mymodule_form_my_image_node_form_alter(&$form, &$form_state) {
  // If the node is being created, redirect the users to the page where
  // they can choose the content type for a new node; otherwise, redirect
  // them to the page showing the node.
  $destination = (!isset($node->nid) || isset($node->is_new)) ? 'node/add' : "node/{$node->nid}";

  $form['actions']['cancel'] = array(
    '#markup' => l(t('Cancel'), $destination),
    '#weight' => 20,
  );
}  

Notas

  • el marcado es el tipo de elemento de formulario predeterminado; no es necesario utilizar #type = 'markup' .

  • En el formulario de edición de nodo, todos los botones están dentro de $form['actions'] . Los pesos usados ​​de los botones que usa el formulario son 5 (Guardar), 10 (Vista previa) y 15 (Eliminar). Usé 20 para mostrar el enlace después de esos botones, pero puedes cambiar su peso para mostrarlo en una posición diferente.

     // Add the buttons. $form['actions'] = array('#type' => 'actions'); $form['actions']['submit'] = array( '#type' => 'submit', '#access' => variable_get('node_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_REQUIRED || (!form_get_errors() && isset($form_state['node_preview'])), '#value' => t('Save'), '#weight' => 5, '#submit' => array('node_form_submit'), ); $form['actions']['preview'] = array( '#access' => variable_get('node_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_DISABLED, '#type' => 'submit', '#value' => t('Preview'), '#weight' => 10, '#submit' => array('node_form_build_preview'), ); if (!empty($node->nid) && node_access('delete', $node)) { $form['actions']['delete'] = array( '#type' => 'submit', '#value' => t('Delete'), '#weight' => 15, '#submit' => array('node_form_delete_submit'), ); }
  • No es necesario usar arg() para comprender si el formulario es para editar un nodo existente o para crear uno nuevo. !isset($node->nid) || isset($node->is_new) es TRUE , para verificar que se está creando el nodo. Drupal parece simplemente marcar empty($node->nid) , aunque node_object_prepare () usa !isset($node->nid) || isset($node->is_new) .

  • Si se establece $_GET['destination'] , el enlace agregado con l() apuntará a esa ruta.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım