views:

381

answers:

2

I have a custom Drupal module displaying some data in a table. Each row has a link which if clicked will delete the relevant row. Specifically, when the link is clicked it will take the user to a confirmation page. This page is really just a drupal form which says 'are you sure' with two buttons: 'Yes', 'No'. I figure I will need to pass the rowID to the confirmation page.

My question: What is the typically way to pass data to a new page in Drupal 7? I guess I could just add the rowID to the URL and use the $_GET[] from the confirmation page... I don't think this is very safe and was wondering if there was a better 'Drupal' way.

Thanks!

A: 

If the data are nodes, you can make the link node/%/delete where % is the nid. Drupal knows how to handle the delete page, as its a core path. Then, the delete confirmation follows the rest of the system and is very 'Drupal'.

I am not sure if this changed at all in Drupal 7, but this is what I did for countless modules.

Kevin
Its basically a row in a MySQL table, not a node... so I don't think thats what I'm looking for
stotastic
How is the data getting into the system if its not node related? Anyway then, you would just make up mymodule/%/delete as a menu hook where % is the row ID. That page would call drupal_get_form with a confirmation form, and hook_submit processes that.
Kevin
its somewhat an application using Drupal to handle the tedious stuff like like user management and themes. Data gets in by an insert statement.
stotastic
+3  A: 

You'd use something like the following

<?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'));

}

?>

You can look here for examples of how core modules do it (have look at node_delete_confirm)

redben
Also note that for Drupal 7, there is an entity system. So if your "rows" are domain entities you should consider using the Entity api as it would ease a lot of your coding, especialy if you rely on this module http://drupal.org/project/entity
redben
Thanks, this helped get me on the right track.I found a good tutorial here:http://www.akchauhan.com/create-an-action-confirm-form-using-confirm_form-function-in-drupal/
stotastic

related questions