如果我正確理解你的問題,你所要做的就是返回內容而不通過theme_page
運行它。 theme_page
需要你的內容並將其包裝在網站模板中,所以在你的案例中手動調用它是複製模板。
另一種解決方法是讓你的頁面的回調函數不返回任何東西,而不是打印的輸出theme_page
。如果回調函數沒有返回文本,則網站的模板不會自動包含。
<?php
function mymodule_menu() {
$items = array();
$items['option1'] = array(
'title' => 'Front page option #1',
'access arguments' => array('access content'),
'page callback' => 'mymodule_option1',
'type' => MENU_CALLBACK,
);
$items['option2'] = array(
'title' => 'Front page option #2',
'access arguments' => array('access content'),
'page callback' => 'mymodule_option2',
'type' => MENU_CALLBACK,
);
return $items;
}
function mymodule_option1() {
// build HTML content here
return $content;
}
function mymodule_option2() {
// build HTML content here
print theme('page', $content);
return null;
}
選項1工作,沒有意識到var名稱必須是$內容。現在我在我的主頁上看到Array。所以我需要在mymodule_option1函數中構建完整的html?是不是你的意思是把PHP中的HTML不在PHP中的HTML? – stef 2009-08-12 14:27:46
選項2工作更好;謝謝ceejayoz! – stef 2009-08-12 14:32:19
如果你想使它成爲真正的Drupalish,你應該製作一個主題函數,使得實際的HTML,而你的菜單回調做的邏輯。這是contrib模塊可以覆蓋它們的輸出。但是,在一個自定義站點模塊中,這個功能並不重要。除此之外,好的迴應+1 – googletorp 2009-08-12 14:52:39