2015-09-08 41 views
0

我有一個Drupal站點,它有兩個頁面A(www.mysite.com/A)和(www.mysite.com/B)。我想創建一個模塊,它將執行以下操作如何在頁面加載之前在drupal中重定向用戶?

- 當用戶訪問頁面A時檢測到它。

- 執行以dB爲單位進行一些檢查,找出用戶是否有權訪問

- 如果用戶沒有訪問網頁A然後重定向他網頁B

-Load網頁B

我無法找出哪些鉤子讓我在頁面加載之前改變路徑。請幫忙 。

+0

[hook_url_inbound_alter](https://api.drupal.org/api/drupal/modules%21system%21system.api .PHP /功能/ hook_url_inbound_alter/7)? –

+0

謝謝!我會試試 –

回答

1

如果你的路線A的作者,你可以在你的hook_menu()使用'access callback'drupal_goto(),否則如果你試圖修改另一個模塊的行爲做到這一點,你可以在一個hook_menu_alter()做到這一點。

另一種選擇(未漂亮),是實現hook_init()這樣的:

function yourmodule_init() { 
    if (current_path() == 'A') { 
    // Do some DB checks... 
    drupal_goto('B'); 
    } 
} 
+0

只有一個疑問。我禁用了clean_url。所以路徑是?q = A.如何在current_path中處理這個?缺少clean_urls會影響它嗎? –

+0

'<?php /** * hook_menu_alter()的實現。 * * @param array $ items *按路徑鍵入的菜單項。 */ function ajax_privacy_menu_alter(&$ items){ $ items ['user /%'] ['access callback'] ='check_access'; $ items ['user /%'] ['access arguments'] = array(1); } function check_access($ user_id) { global $ user; ($ user-> uid!= $ user_id) drupal_goto('node/24');其他 drupal_goto('user /'.$ user_id); }試過這個,它的工作..但它給「太多重定向」錯誤..我想這是因爲行... drupal_goto('user /'。user_id); ...請幫助 –

+0

是的,'current_path()'處理非乾淨的URL。總是在你的函數前加上你的模塊的名字(例如'ajax_privacy_check_access'),是的,不要這樣做第二個'drupal_goto()',而不是'return TRUE;' – SebCorbin

相關問題