2011-12-02 52 views
1

請忍受這個Drupal API新手,同時我解釋一些背景資料!Drupal用戶訪問回調選擇性回覆

我一直在試驗下面的代碼,以便在用戶點擊自定義節點創建鏈接時創建2個單獨的響應。默認情況下,打開一個頁面,允許用戶完成創建節點的常規步驟。 我的模塊做的是檢查用戶是否具有特定的權限,並允許他們繼續創建節點或拋出拒絕訪問頁面。

function mymodule_menu_alter(&$items) { 
    $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback'; 
} 

function mymodule_access_callback(){ 
    if(user_access('open sesame')){ 
    drupal_set_message("successfully intecepting new node creation"); 
    return true; 
    } 
    return false; 
} 

節點/添加/頁面被成功阻止,但在兩種情況下都是這樣。 if語句確定用戶是否具有一定的權限,並在其中我加回真正導致以下錯誤:

Fatal error: require_once() [function.require]: Failed opening required '/node.pages.inc' (include_path='.:') in /var/www/vhosts/mysite.co.uk/httpdocs/includes/menu.inc on line 347

作爲一個新手,我不知道我需要什麼,以避免做拒絕正確用戶的訪問被拒絕頁面。

+0

要注意Drupal沒有爲「node/add/page /%」定義任何菜單回調;你正在改變一個不存在的菜單項,在這種情況下你不應該使用'hook_menu_alter()'。 – kiamlaluno

回答

0

試試這個:

function mymodule_menu_alter(&$items) { 
    $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback'; 
    $items["node/add/page/%"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc'; 
} 

編輯

嘗試改變以上情況的第二行:

$items["node/add/page"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc'; 

它明確設置父項的文件路徑的嘗試你正在定義的路徑。

此外,這可能是一個愚蠢的事情說,但每次你改變hook_menu_alter()確保你清除Drupal的緩存,所以變化被拿起。

+0

對不起,沒有什麼區別 – sisko

+1

乍一看原因是因爲'node.module'中沒有'node/add/page /%'路徑集(參見['node_menu()'](http:// api .drupal.org/api/drupal/modules - node - node.module/function/node_menu/6))所以你實際上並沒有改變任何東西,只是增加了一個沒有「頁面回調」的新菜單項,這就是爲什麼你會得到錯誤。 – Clive

+0

你可能是對的,但在菜單缺少回調的情況下,它應該回復到最近父母的回調函數,不應該。至少這是我在http://api.drupal.org/api/drupal/includes--menu.inc/group/menu/6 – sisko