2013-06-05 31 views
0

我有單模:Drupal的:通功能名稱作爲頁面參數

function cabinet_menu() { 
$items['cabinet'] = array(
    'title' => 'cabinet', 
    'title callback' => 'cabinet_title', 
    //'title arguments' => array(1), 
    'page arguments' => array('cabinet_mysettings'), 
    'page callback' => 'cabinet_page', 
    'access arguments' => array('access content'), 
    'type' => MENU_NORMAL_ITEM, 
); 

return $items; 
} 

我想傳遞給頁面的參數「一個名爲「cabinet_mysettings」

function cabinet_mysettings() { 
debug('call settings'); 
global $user; 

$cabinet = user_load($user->uid); 
return $cabinet; 
} 

function cabinet_page($cabinet) { 
debug($cabinet); 
} 

在「cabinet_page」調試功能只顯示字符串「cabinet_mysettings」。

爲什麼菜單鉤子不明白,頁面參數不是一個函數名稱,而是一個刺痛?

UPD:devel的模塊hook_menu:

$items['devel/reinstall'] = array(
'title' => 'Reinstall modules', 
'page callback' => 'drupal_get_form', 
'page arguments' => array('devel_reinstall'), 
'description' => 'Run hook_uninstall() and then hook_install() for a given module.', 
'access arguments' => array('access devel information'), 
'file' => 'devel.pages.inc', 
'menu_name' => 'devel', 

);

我認爲'devel_reinstall'是一個函數。

有誰知道這種回調是如何工作的?

回答

0

頁面參數不是爲了在幕後做某些事情而設計的。您可以使用它們將參數傳遞給頁面回調,方法是將它們放入網址中。

將字符串放在頁面參數中('page arguments'=> array('cabinet_mysettings'))會導致只傳遞該字符串。這是沒有辦法的。有關更全面的說明,請參閱hook_menu documentation

因此,你的情況,我會考慮這樣的事情:

function cabinet_menu() { 
    $items['cabinet/%'] = array(
    'title' => 'cabinet', 
    'title callback' => 'cabinet_title', 
    'page arguments' => array(1), 
    'page callback' => 'cabinet_page', 
    'access arguments' => array('access content'), 
    'type' => MENU_NORMAL_ITEM, 
); 

    return $items; 
} 

function cabinet_mysettings() { 
    debug('call settings'); 
    global $user; 

    $cabinet = user_load($user->uid); 
    return $cabinet; 
} 

function cabinet_page($my_param_name) { 
    $cabinet = cabinet_mysettings($my_param_name); 
    debug($cabinet); 
} 

這是否幫助?

+0

m1n0,這對我很清楚。但我想分享我的模塊在'cabinet_title'和'cabinet_page'函數中生成的數據。 URL中不會有wildchar。我想要在'cabinet_title'和'cabinet_page'之前調用的函數。它必須生成模塊數據。 – menelai

+0

我應該在每個函數中調用'cabinet_mysettings'還是有正確的方法? – menelai

+0

是的,在每一個需要你的數據的函數中調用'cabinet_mysettings'是可能的解決方案......但是你也可以考慮有一個靜態對象來存儲這些數據......甚至會話變量......這取決於你的具體的情況是,但是如果它進行了大量的處理或者它從數據庫加載數據,那麼您不應該多次調用該函數。 我最喜歡的選擇是靜態對象,它是相當優雅的解決方案,但它不完全是「drupal方式」 – m1n0