2011-12-05 56 views
0

我想要做的是在模塊中生成一些原始輸出。Theming Module Output

我想將一組數據傳遞給一個模板文件,然後使用該數據來填充模板中的代碼。模板由我的主題文件夾中的文件表示。

我有一個鉤設立一定的URL(/ iTunes的):

$items['itunes'] = array(
    'page callback'  => 'itunespromo_buildpage', 
    'type'    => MENU_SUGGESTED_ITEM, 
    'access arguments' => array('access content'), 
); 

..inside itunespromo_buildpage ...

function itunespromo_buildpage() { 
    //grab some data to pass through to template file, put into $promo_data 
    $details = theme('itunes_page', array(
     'promo_data' => $promo_data, 
    )); 
    return $details; 
} 

這裏是hook_theme():

function itunespromo_theme() { 
    return array(
     'itunes_page' => array(
      'template' => 'itunes_page', 
     ), 
    ); 
} 

在我的主題的template.php裏面:

function geddystyle_itunes_page($vars) { 
    return print_r($vars['promo_data'], true); 
} 

現在,$ promo_data 正在通過罰款,並print_r'd在結果頁上。不過,我想接下來使用$ promo_data變量並將其用在我的itunes_page.tpl.php模板文件中。

我很確定我在這裏。我是否應該調用某種渲染函數,並從函數itunespromo_theme()將$ promo_data變量傳遞給它?

+0

你使用的是什麼版本的Drupal是? – KerrM

+0

對不起,這是Drupal 7. – Geddy

回答

0

我相信你只需要更新你的hook_theme()來提供發送變量到你的模板文件的能力。

像這樣的東西應該做的伎倆:

function itunespromo_theme($existing, $type, $theme, $path) { 
return array(
    'itunes_page' => array(
    'variables' => array(
     'promo_data' => NULL, 
    ), 
     'template' => 'itunes_page', 
    ) 
); 
} 

此外,而不是直接調用主題()函數,你想什麼做的是實際構建一個可呈現陣列,讓Drupal的調用主題()功能。你應該做的是調用drupal_render,然後調用theme()給你。看這條建議在這裏多一點清晰:

http://drupal.org/node/1351674#comment-5288046

你的情況,你會改變你的函數itunespromo_buildpage看起來是這樣的:

function itunespromo_buildpage() { 
    //grab some data to pass through to template file, put into $promo_data 
    $output = array(
    '#theme' => 'itunes_page', 
    '#promo_data' => $promo_data //call $promo_data from the tpl.php page to access the variable 
); 
    $details = drupal_render($output); 
    return $details; 
} 
+0

哇..完美的工作。非常感謝你,你不知道我今天頭髮多少。就脫髮而言,我基本上已經使用了30年。 – Geddy

+0

Woops,稍微說了一點..考慮到這些變化,我如何從itunes_page.tpl.php中訪問$ promo_data變量。 – Geddy

+0

給定代碼$ promo_data在$ options中。 (作爲#options在$ output中聲明 - 只需將#options更改爲#promo_data,並且應該可以工作)我已經更改它以反映您應該執行的操作。 – KerrM