我有一個Drupal站點,它有兩個頁面A(www.mysite.com/A)和(www.mysite.com/B)。我想創建一個模塊,它將執行以下操作如何在頁面加載之前在drupal中重定向用戶?
- 當用戶訪問頁面A時檢測到它。
- 執行以dB爲單位進行一些檢查,找出用戶是否有權訪問
- 如果用戶沒有訪問網頁A然後重定向他網頁B
-Load網頁B
我無法找出哪些鉤子讓我在頁面加載之前改變路徑。請幫忙 。
我有一個Drupal站點,它有兩個頁面A(www.mysite.com/A)和(www.mysite.com/B)。我想創建一個模塊,它將執行以下操作如何在頁面加載之前在drupal中重定向用戶?
- 當用戶訪問頁面A時檢測到它。
- 執行以dB爲單位進行一些檢查,找出用戶是否有權訪問
- 如果用戶沒有訪問網頁A然後重定向他網頁B
-Load網頁B
我無法找出哪些鉤子讓我在頁面加載之前改變路徑。請幫忙 。
如果你的路線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');
}
}
只有一個疑問。我禁用了clean_url。所以路徑是?q = A.如何在current_path中處理這個?缺少clean_urls會影響它嗎? –
'<?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); ...請幫助 –
是的,'current_path()'處理非乾淨的URL。總是在你的函數前加上你的模塊的名字(例如'ajax_privacy_check_access'),是的,不要這樣做第二個'drupal_goto()',而不是'return TRUE;' – SebCorbin
[hook_url_inbound_alter](https://api.drupal.org/api/drupal/modules%21system%21system.api .PHP /功能/ hook_url_inbound_alter/7)? –
謝謝!我會試試 –