2009-08-12 131 views
3

即時通訊使用自定義模塊在example.com/frontpage創建我的主頁內容。drupal 6:如何從自定義模塊中獲取數據到模板文件

在模塊中我運行一個查詢,獲取我需要的數據,在一個數組中。當我返回主題('page',$ my_array)時,我得到了「主頁內的主頁」,即默認的drupal標誌和sitename在主內容區域中第二次顯示。

什麼是最好的方式去創建一個特定的tpl.php文件,其內容應該是......?

我意識到它是一個非常普遍的問題,但在2個小時的努力的事情了,閱讀教程,香港專業教育學院變得不是很遠都...

感謝

回答

2

如果我正確理解你的問題,你所要做的就是返回內容而不通過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; 
} 
+0

選項1工作,沒有意識到var名稱必須是$內容。現在我在我的主頁上看到Array。所以我需要在mymodule_option1函數中構建完整的html?是不是你的意思是把PHP中的HTML不在PHP中的HTML? – stef 2009-08-12 14:27:46

+0

選項2工作更好;謝謝ceejayoz! – stef 2009-08-12 14:32:19

+1

如果你想使它成爲真正的Drupalish,你應該製作一個主題函數,使得實際的HTML,而你的菜單回調做的邏輯。這是contrib模塊可以覆蓋它們的輸出。但是,在一個自定義站點模塊中,這個功能並不重要。除此之外,好的迴應+1 – googletorp 2009-08-12 14:52:39

0

你可能是比一個自定義模塊「若干意見」,unles查詢的網頁更好的是很奇怪的,觀點應該比那種事情的自定義模塊更好。

如果你有自己的主題(或願意創建一個),你還可以使用網頁front.tpl.php(如解釋here

+0

面板+視圖在許多情況下會更好。 – ceejayoz 2009-08-12 14:15:01

+0

與一位同事一起嘗試使用,而不是工作。我需要一些其他的邏輯,這是不可能的。 – stef 2009-08-12 14:20:57

+0

本應該是「使用意見,不工作」 – stef 2009-08-12 14:22:54

0

是什麼在你的模板文件?這些元素是否有可能被呈現兩次,因爲它們被包含兩次,即一次在主題的page.tpl.php中,另一次在$content變量(它看起來是由您的模塊生成的)中?

許多模板文件具有以下結構:

print $head; 
print $logo, $search, $navbar, $messages; 
print $content; 
print $footer, $closure; 

如果theme('page', $my_array)是負責創建$content變量,$content已經包括$logo和朋友,他們會被渲染兩次。

第一步我想借此在這種情況下是在我的主題的template.php文件中實現hook_preprocess_page(),並在一些dsm()調用拋出(如果你有安裝devel模塊 - 你應該),或print_r()的,以看看究竟是什麼使它成爲頁面模板。
HTH

相關問題