2010-06-12 200 views
9

我有一個自定義的Drupal模塊,它在表格中顯示一些數據。每一行都有一個鏈接,如果點擊將刪除相關的行。具體來說,當鏈接被點擊時,它會將用戶帶到確認頁面。這個頁面實際上只是一個drupal表單,裏面有兩個按鈕'確定','是','否'。我想我需要將rowID傳遞給確認頁面。Drupal將參數傳遞給頁面

我的問題:什麼是典型的方式將數據傳遞到一個新的頁面在Drupal 7?我想我可以只添加rowID到URL並使用$ _GET []從確認頁面...我不認爲這是非常安全的,並想知道是否有更好的'Drupal'方法。

謝謝!

回答

17

你會使用類似以下

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

} 

?> 

你可以看看這裏的how core modules do it例子(有看node_delete_confirm)

+0

另請注意,對於Drupal 7,有一個實體系統。所以,如果你的「行」是域的實體,你應該考慮使用實體API,因爲它會輕鬆很多的編碼,特別是具有如果依靠這個模塊http://drupal.org/project/entity – redben 2010-06-13 12:42:47

+0

謝謝,這有助於獲得我在正確的軌道上。 我發現了一個很好的教程在這裏: http://www.akchauhan.com/create-an-action-confirm-form-using-confirm_form-function-in-drupal/ – stotastic 2010-06-13 15:26:45

+0

我發現在這個視頻的真棒例子教程: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-path – 2011-03-12 18:04:27

0

如果數據節點,可以使鏈接節點/%/刪除其中%是NID。 Drupal知道如何處理刪除頁面,作爲其核心路徑。然後,刪除確認跟在系統的其餘部分,非常'Drupal'。

我不知道這在Drupal 7改變過,但是這是我做了無數的模塊。

+0

它基本上在一個MySQL表,而不是一個節點的行...所以我不認爲這就是我正在尋找 – stotastic 2010-06-12 22:12:30

+1

的數據是如何進入系統如果不節點有關?無論如何,您只需將mymodule /%/ delete組合爲菜單鉤子,其中%是行ID。該頁面將使用確認表單調用drupal_get_form,並且hook_submit處理該表單。 – Kevin 2010-06-12 22:48:43

+0

它有點使用Drupal來處理像用戶管理和主題這樣的單調乏味的東西。數據通過插入語句進入。 – stotastic 2010-06-13 13:41:29