2010-06-12 4 views
9

J'ai un module Drupal personnalisé affichant certaines données dans un tableau. Chaque ligne a un lien qui, s'il est cliqué, supprimera la ligne correspondante. Plus précisément, lorsque le lien est cliqué, il amène l'utilisateur à une page de confirmation. Cette page est vraiment juste une forme drupal qui dit 'êtes-vous sûr' avec deux boutons: 'Oui', 'Non'. Je suppose que je vais devoir passer le rowID à la page de confirmation.Drupal passe argument à la page

Ma question: Quelle est généralement la manière de transmettre des données à une nouvelle page dans Drupal 7? Je suppose que je pourrais simplement ajouter le rowID à l'URL et utiliser le $ _GET [] de la page de confirmation ... Je ne pense pas que ce soit très sûr et se demandait s'il y avait un meilleur moyen de 'Drupal'.

Merci!

Répondre

17

Vous devriez utiliser quelque chose comme

<?php 
function yourmod_menu() { 
    // for examlple 
    $items['yourmod/foo/%/delete'] = array(
    'title' => 'Delete a foo', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('youmode_foo_delete_confirm', 2), // 2 is the position of foo_id 
    'access arguments' => array('delete foo rows'), 
    'type' => MENU_CALLBACK, 
); 

    return $items; 
} 

function yourmod_foo_delete_confirm($form, &$form_state, $foo_id) { 
    // load the row 
    $foo = yourmod_get_foo($foo_id); 

    // build your form, if you need to add anything to the confirm form 
    // .... 
    // Then use drupal's confirm form 
    return confirm_form($form, 
        t('Are you sure you want to delete the foo %title?', 
        array('%title' => $foo->title)), 
        'path/to/redirect', 
        t('Some description.'), 
        t('Delete'), 
        t('Cancel')); 

} 

?> 

Vous pouvez regarder ici des exemples de how core modules do it (ont regard sur node_delete_confirm)

+0

Notez également que pour Drupal 7, il existe un système d'entités. Donc, si vos "rangées" sont des entités de domaine, vous devriez envisager d'utiliser l'API d'entité car cela faciliterait beaucoup votre codage, surtout si vous comptez sur ce module http://drupal.org/project/entity – redben

+0

Merci, cela a aidé moi sur la bonne voie. J'ai trouvé un bon tutoriel ici: http://www.akchauhan.com/create-an-action-confirm-form-using-confirm_form-function-in-drupal/ – stotastic

+0

J'ai trouvé un exemple génial dans cette vidéo tutoriel: http://buildamodule.com/video/drupal-7-core-concepts-how-to-add-and-manipulate-pages-with-the-menu-system-how-to-use-placehoders-to- pass-arguments-in-the-middle-of-a-path –

0

Si les données sont des nœuds, vous pouvez créer le nœud de lien /%/delete où% est le nid. Drupal sait comment gérer la page de suppression, car c'est un chemin de cœur. Ensuite, la confirmation de suppression suit le reste du système et est très «Drupal».

Je ne sais pas si cela a changé du tout dans Drupal 7, mais c'est ce que j'ai fait pour d'innombrables modules.

+0

C'est fondamentalement une rangée dans une table de MySQL, pas un noeud ... donc je ne pense pas que c'est ce que je recherche – stotastic

+1

Comment les données entrent-elles dans le système si elles ne sont pas liées au noeud? Quoi qu'il en soit, vous devez simplement créer mymodule /%/delete en tant que hook de menu où% est l'ID de ligne. Cette page appelle drupal_get_form avec un formulaire de confirmation, et hook_submit le traite. – Kevin

+0

son quelque peu une application en utilisant Drupal pour gérer les choses fastidieuses comme la gestion des utilisateurs et des thèmes. Les données entrent dans une instruction d'insertion. – stotastic

1

La solution la plus simple serait d'utiliser un module existant créé pour cette but:

Vous pouvez configurer les valeurs de formulaire peuvent être définies à partir de l'URL, puis réécrire les champs affichés dans votre table pour générer les liens nécessaires.

Questions connexes