通過頁面管理器和視圖兩個面板,您可以創建一個接受像用戶/%/點這樣的參數的頁面。在Drupal中創建一個頁面,其中包含一個沒有視圖或面板的動態URL
但是,除了創建動態頁面URL之外,我不需要這些模塊的其他任何功能。我只是想創建一個頁面,當某個用戶位於url users /%/ points時,該頁面會顯示。如何在不使用視圖或面板之類的模塊的情況下設置URL?
通過頁面管理器和視圖兩個面板,您可以創建一個接受像用戶/%/點這樣的參數的頁面。在Drupal中創建一個頁面,其中包含一個沒有視圖或面板的動態URL
但是,除了創建動態頁面URL之外,我不需要這些模塊的其他任何功能。我只是想創建一個頁面,當某個用戶位於url users /%/ points時,該頁面會顯示。如何在不使用視圖或面板之類的模塊的情況下設置URL?
Drupal有一個系統來創建動態網頁,這是當你查看一個節點或用戶會發生什麼。你有幾個選擇,但這一切都發生在hook_menu。
function modulename_menu() {
$items = array();
$items['users/%user/points'] = array(
'page callback' => callback, // the function to call
'page arguments' => array(1), // The argument to pass, 1 = %user, which will be a user object.
...
);
$items['users/%/points'] = array(...);
$items['users/points'] = array(...);
}
在第一個例子中,您使用Drupal的加載系統。如果Drupal發現一個用戶,它將在參數索引處調用user_load,該索引可用,而不是實際參數(用戶標識)。如果沒有用戶被發現404將被退回。
在第二個示例中,允許使用任何參數,這意味着如果您嘗試訪問user/my-little-pony/points
,您將獲得一個頁面。
在第三個示例中用於表示Drupal允許其他參數。所以如果你想訪問user/points/pony
,你會得到user/points
頁面,如果你的回調函數允許的話,可以使用額外的參數。
還記得設置某種訪問控制。您可以定義自定義函數以確定用戶是否應該訪問,使用drupal菜單系統並需要權限,如access content
。
現成代碼:
/**
* Implementation of hook_menu().
*/
function example_menu() {
$items = array();
$items['user/%/points'] = array(
'title' => 'Page title here',
'description' => 'Description here, mostly used for admin pages',
'page callback' => 'example_callback',
'page arguments' => array(1)
'access arguments' => array('access content'),
);
return $items;
}
example_callback($arg) {
return t('The arg is @arg', array('@arg' => $arg));
}
這將需要進入example.module,你需要創建一個example.info文件。您可以將示例更改爲您創建的任何模塊。
如果我正確理解你的話,可以使用自定義模塊中的hook_menu輕鬆完成。下面是動態頁面的示例,其中動態頁面由用戶插入的變量創建。
function MYMODULE_menu() {
$items = array();
$items['user/points/%/'] = array(
'page callback' => 'MY_PAGE_CALLBACK_FUNCTION',
'title callback' => 'MY_PAGE_CALLBACK_TITLE_FUNCTION',
'title arguments' => array(3),
'type' => MENU_CALLBACK,
);
return $items;
}
function MY_PAGE_CALLBACK_TITLE_FUNCTION($arg) { return "My dynamic title: " . $arg; }
太好了。我需要更多的幫助來實現這個目標。我假設我把這個代碼放到了modulename.install文件中,對嗎?這裏是我所做的:1)用模塊名稱(custom_functions_menu)重命名了modulename_menu 2)刪除了第二個$ items數組中的'...'3)刪除了第三個和第四個$ items數組,因爲我第一次只想在獲得更好的功能之前獲得這個工作的基本版本(即只有用戶/%/點)。 4)運行update.php(不知道這是否有必要,但值得一試)。最後,我仍然收到「找不到頁面」錯誤。 – maxedison 2010-11-17 13:27:53
@maxedison,你的代碼應該放在'.module'文件中。 '.install'用於安裝鉤子,比如創建數據庫表並將其插入到數據庫中。你可以看一下[手冊](http://drupal.org/developing/modules)閱讀更多關於模塊開發的內容。順便說一句,你還需要創建一個回調函數,只需創建一個函數,該函數返回一個文本字符串,以便看到所有東西都能正常工作。另外,當更改hook_menu中的東西時,您需要清除菜單緩存。 – googletorp 2010-11-17 14:31:03
仍然沒有運氣。我已將代碼移至.module文件,使頁面回調函數返回一個字符串,並使用Performance頁面上的「Clear cached data」按鈕(清除菜單緩存,不是?)。我仍然收到頁面未找到錯誤。 – maxedison 2010-11-17 21:03:43