別名node/1234
到blogs
並不意味着你可以控制菜單項路由器的其餘部分。
舉例來說,如果你的非混淆節點路徑是「node/1234」,那麼你「擁有」剩下的參數。 即可以從node/1234/567
從PHP訪問567
這樣的:
<?php print arg(2); ?>
如果你想「擁有」 /blogs
URL的一部分,你必須使用hook_menu來定義它。正如你已經觸及php,我認爲最好的方式是製作模塊。 但是,您可以使用視圖或面板模塊。現在
<?php
function MYMODULE_menu() {
$items = array();
$items['blogs'] = array(
'title' => 'Main Blogs page',
'page callback' => 'MYMODULE_page',
'access arguments' => array('access content'),
'type' => MENU_SUGGESTED_ITEM,
);
$items['blogs/%'] = array(
'page callback' => 'MYMODULE_blog_view',
'page arguments' => array(1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function MYMODULE_blog_view($blog_id){
// $node = node_load($blog_id);
// return print_r($node, TRUE);
}
?>
,在MYMODULE_blog_view功能,你可以從ARG得到的參數(1)爲好。您也可以通過組合兩個菜單路由器項目在單個頁面中進行回叫,但我建議使用單獨的路由器項目。 (8月8日): 爲什麼我使用node_load($ blog_id)和其他評論垃圾的原因是假設你需要來自節點的部分(例如:你想使用節點ID參數來顯示一個View,或者類似的需要來自節點的特定數據的東西)。 但從來沒有允許用戶查看從node_load()加載的節點,因爲它就像上帝給予用戶所要求的任何東西。
對於節點,讓我來解釋一下有點噱頭。把它放在回調函數中。
$node = node_load($blog_id);
if ($node && $node->type == 'blog'){
$_GET['q'] = 'node/' . $node->nid;
return menu_execute_active_handler('node/' . $node->nid, FALSE);
}
drupal_not_found(); // important!
這將加載從博客ID(這是URL)的節點ID,檢查它是否在「博客」類型和設置菜單句柄到相關節點ID通路。 現在,當您訪問博客/ 123時,如果它是博客節點,您將看到node/123的內容。但它不是重定向。它不會像完全別名的URL一樣工作,但有時候會有幫助。
或者,您可以檢查用戶是否有權訪問node_access()中的節點。
感謝您的帖子,我如何加載我的自定義PHP頁面,我已經在節點博客的主體部分/ 這將是該地區然後我可以根據arg(1) – 2012-08-07 18:16:51
呈現頁面的外觀。我放入node_view(node_load($ nodeId)); 你推薦? – 2012-08-07 18:24:44
請不要。這會打開一個很大的安全問題,用戶可以訪問任何節點。 查看某些解決方法的更新答案。謝謝。 – 2012-08-07 22:16:12