0
當一個頁面被調用時,我想根據路徑來檢查呼叫,我想用一些參數將用戶重定向到首頁。我將在一個塊中使用這些參數來向訪問者顯示額外的信息。Drupal pagecall第一個鉤子
我應該使用什麼鉤子,這樣drupal必須做最不必要的工作?
當一個頁面被調用時,我想根據路徑來檢查呼叫,我想用一些參數將用戶重定向到首頁。我將在一個塊中使用這些參數來向訪問者顯示額外的信息。Drupal pagecall第一個鉤子
我應該使用什麼鉤子,這樣drupal必須做最不必要的工作?
1)template_preprocess_page函數在這裏是合適的鉤子。
2)另一種選擇是使用Rules模塊。
事件:Drupal是初始化(使用hook_init) 條件:執行定製的PHP代碼(檢查路徑參數) 操作:頁面重定向,其他規則的動作(例如消息)
我會建議秀Drupal消息給用戶而不是塊。除非用戶已登錄並且數據庫中存在塊中顯示的參數,否則您可以使用views模塊創建該塊。
如果分類術語頁面顯示屬於詞彙表'4',這是一個重定向規則的導出。將其導入您的規則以查看結果。
{ "rules_taxonomy_redirect_business" : {
"LABEL" : "Taxonomy redirect - Business",
"PLUGIN" : "reaction rule",
"TAGS" : [ "redirect", "taxonomy" ],
"REQUIRES" : [ "php", "rules" ],
"ON" : [ "init" ],
"IF" : [
{ "php_eval" : { "code" : "$check1 = (arg(0)==\u0027taxonomy\u0027)\u0026\u0026(arg(1)==\u0027term\u0027);\r\n$check2 = (arg(3)!=\u0027edit\u0027);\r\n\r\nif (arg(2)) {\r\n$tid = arg(2);\r\n$vid = db_query(\u0027SELECT vid FROM {taxonomy_term_data} WHERE tid = :tid\u0027, array(\u0027:tid\u0027 =\u003E $tid))-\u003EfetchField();\r\n$check3 = ($vid == \u00274\u0027);\r\n}\r\n\r\nreturn ($check1)\u0026\u0026($check2)\u0026\u0026($check3);" } }
],
"DO" : [
{ "redirect" : { "url" : "\u003C?php\r\n$tid = arg(2);\r\nreturn \u0027business?cat%5B%5D=\u0027 . $tid;\r\n?\u003E" } }
]
}
}
可以使用規則。但這不是一個如何實現它的問題,而是儘可能早地掛鉤到drupal,以便最少量的工作需要由drupal完成。目前我使用hook_init,但這意味着很多不必要的代碼已經由drupal allready執行。 – Nealv