2010-08-15 3 views
1

Lorsque j'appuie sur le bouton Supprimer sur certains contenus, je suis redirigé vers une page de confirmation. L'option de suppression est un bouton, tandis que l'option d'annulation est un lien. Cela a l'air plutôt bizarre. J'ai trouvé qu'il y a une fonction form_confirm() dans drupal, mais je ne peux pas comprendre comment l'utiliser. Est-ce que quelqu'un sait comment faire le lien annuler dans un bouton?Drupal - faire le lien annuler sur la page de confirmation un bouton

Répondre

0

Ou cela en utilisant pas javascript (et le remplacement eregi() avec preg_match() ...

if ($form['#theme'] == 'confirm_form') { 
    $no = $form['actions']['cancel']['#value']; 
    if (!is_null($no)) { 
     // Get the text to put on the cancel button 
     $value = preg_replace('/(<\/?)(\w+)([^>]*>)/e', '', $no); 
     preg_match('/href\s*=\s*\"([^\"]+)\"/', $no, $href); 
     $form['actions']['cancel']['#value'] = ''; 
     $form['href']=array(
     '#type'=>'value', 
     '#value'=>$href[1], 
    ); 

     // Add our own button 
     $form['actions']['docancel'] = array(
     '#type' => 'submit', 
     '#name' => 'cancel', 
     '#submit' => array('mymodule_confirm_form_cancel'), 
     '#value' => $value, 
    ); 

    } 
    } 

et

function mymodule_confirm_form_cancel(&$form,&$form_state) { 
    $href=$form['href']['#value']; 
    if (!is_null($href)) { 
    $form['#redirect']=$href; 
    } 
} 
2

La raison pour laquelle le lien d'annulation ressemble à un lien est parce que c'est un lien <a>, tandis que le bouton de confirmation, est un élément de soumission de formulaire <input type="submut>.

Si vous souhaitez créer le lien d'annulation, pour ressembler à un bouton d'envoi, vous pouvez le faire avec du CSS pur.

+0

Dans Safari (et Chrome?), C'est aussi simple que d'utiliser '-webkit-appearance: bouton-poussoir'. –

+0

J'ai regardé sur Internet mais je ne trouve pas le bon code CSS. Tout ce que je trouve est de savoir comment faire des boutons élégants, mais je veux simplement un bouton système régulier. – Toxid

1

, essayez cette aide hook_form_alter():

if($form['#theme'] == 'confirm_form') { 
    $no = $form['actions']['cancel']['#value']; 
    if (!is_null($no)) { 
     // Get the text to put on the cancel button 
     $value = preg_replace('/(<\/?)(\w+)([^>]*>)/e', '', $no); 
     eregi('m|href\s*=\s*\"([^\"]+)\"|ig', $no, $href); 

     $form['actions']['cancel']['#value'] = ''; 

     // Add our own button 
     $form['actions']['docancel'] = array(
     '#type' => 'button', 
     '#button_type' => 'reset', 
     '#name' => 'cancel', 
     '#submit' => 'false', 
     '#value' => $value, 
     '#attributes' => array(
      'onclick' => '$(this).parents("form").attr("allowSubmission", "false");window.location = "'.$href[1].'";', 
     ), 
    ); 
     // Prevent the form submission via our button 
     $form['#attributes']['onsubmit'] = 'if ($(this).attr("allowSubmission") == "false") return false;'; 
    } 
    } 
0

Pour Drupal 7 j'utilise:

/** 
* Implements hook_form_alter(). 
*/ 
function yourmodule_form_alter(&$form, $form_state, $form_id) { 
    // Change 'cancel' link to 'cancel' button. 
    if ($form['#theme'] == 'confirm_form') { 
    if ($form['actions']['cancel']['#type'] == 'link') { 
     $title = $form['actions']['cancel']['#title']; 
     $href = $form['actions']['cancel']['#href']; 
     if (!is_null($title) and !is_null($href)) { 
     // Disable Cancel link. 
     $form['actions']['cancel']['#title'] = ''; 
     // Add our own Cancel button. 
     $form['actions']['docancel'] = array(
      '#type' => 'submit', 
      '#name' => 'cancel', 
      '#submit' => array('yourmodule_confirm_form_cancel'), 
      '#value' => $title, 
     ); 
     } 
    } 
    } 
} 

/** 
* Redirect to previous page after confirm form cancel(). 
*/ 
function yourmodule_confirm_form_cancel(&$form, &$form_state) { 
    $href = $form['actions']['cancel']['#href']; 
    if (!is_null($href)) { 
    $form_state['redirect'] = $href; 
    } 
} 

Le problème a également été signalé pour Drupal 8, mais l'équipe centrale de Drupal n'a pas l'intention de résoudre le problème dans le noyau. Voir la demande de support Drupal Change confirmation form Cancel link to a button. Meilleures salutations

Questions connexes