2012-01-10 30 views
1

我有一個鉤子菜單hook_menu發出

$items['node/%/delete'] = array(
     'title' => 'Delete', 
     'load arguments' => array(3), 
     'description' => 'Confirm the action.', 
     'page callback' => 'drupal_get_form', 
     'page arguments' => array('_mymodule_delete', 1), 
     'type' => MENU_CALLBACK, 
     'weight' => -4, 
    ); 
return $items; 

什麼我需要做,以確保以下功能開始工作(和變量得到它們的值):

function _mymodule_delete ($form, $form_state, $node) {
...
}

換句話說,我如何得到三個參數中的值($form,$form_state$node

回答

1

編輯

我有另一個去......

的唯一參數(S),你需要傳遞給drupal_get_form,比其他形式本身,是特定於形式函數參數的名稱; $form$form_state會自動爲您添加。所以,如果你想調用一個形式的_mymodule_delete($form, $form_state, $node)簽名,你會使用此代碼:

$form = drupal_get_form('_mymodule_delete', $the_node); 

當您應用此菜單中的路由器,所有你希望做的是通過傳遞加載$node作爲以相同的方式參照drupal_get_form。您的路由器項目應該是這樣的:

$items['node/%node/delete'] = array(
    'title' => 'Title', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('_mymodule_delete', 1), 
    'access arguments' => array('access content'), 
    'type' => MENU_CALLBACK, 
    'weight' => -4, 
);  

你原來的例子是缺少access arguments/access callback屬性這將使您的網頁無法訪問(403種狀態),所以我一直在access content「標準」接入參數添加。您可能會想要根據自己的需要更改此設置。

字符串node/%node/delete(路由器路徑)和頁面參數數組是你可能在這裏感興趣的位。當你想從URL傳遞一個參數到一個回調函數時,你可以簡單地將它作爲頁面參數之一包含'index'。此索引來自分隔符(/)分隔的路由器路徑的從零開始的數組。

在這個例子中的路徑的三個部分:

0 => 'node', 
1 => '%node', 
2 => 'delete' 

作爲路徑的可變元件處於索引位置1,這就是我們傳遞給page arguments陣列的數目。

只是爲了讓它更復雜些,通過路徑傳遞的變量也可以它傳遞給page callback函數之前傳遞到負載功能。由於某些原因,Drupal中的命名約定是一個名稱爲_load的變量名稱將被調用的函數的名稱。

所以在這種情況下,調用node_load。例如,如果您的路由器路徑爲books/%book,則將調用名爲book_load的函數來準備將該變量傳遞給page callback函數。

加載函數是可選的,如果你的路徑是node/%/delete那麼傳遞給你的表單回調的參數將是來自URL的確切字符串(在這種情況下是節點ID)。

我確定你已經看到它,但hook_menu() documentation盡力解釋所有這些,我可以理解爲什麼它很難理解。

希望有所幫助。

+0

好吧,恐怕我給了一個不好的例子:)我不瞄準刪除選項。這只是一個例子。實際上,這是我自定義模塊中的自定義功能。它與刪除無關:) – Michiel 2012-01-10 16:15:57

+0

啊!我已經編輯了一個全新的答案上面的答案,希望它的竅門:) – Clive 2012-01-10 18:01:43

+0

神聖的廢話,這是一些巨大的答案!但是它確實幫助我做了更多的Drupal文檔。太感謝了!再次... :)但還有兩個問題。我在'_mymodule_delete'函數中加載節點時需要做些什麼? 「訪問回調」參數的真正功能是什麼?你給了'access'和'content',但是這些項目的可能性和功能是什麼? – Michiel 2012-01-10 20:38:21