2011-12-05 6 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', 
     ), 
    ); 
} 

私のテーマのテンプレートの中に:

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()を更新する必要があると信じています。 ()の代わりにあなたが実際にレンダリング可能な配列を構築していることやDrupalがテーマを呼び出すさせることにしたいものを直接テーマ()関数を呼び出すのでは、また

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

:このような

何かがトリックを行う必要があります関数。あなたがしなければならないことは、drupal_renderを呼び出して、あなたのためにtheme()を呼び出すことです。もう少し明確にするため、ここでこのアドバイス断片を見て:あなたはあなたの関数を変更します

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

をお使いの場合にはitun​​espromo_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

Wooops、少し話しました。これらの変更を考えれば、どうすればitunes_page.tpl.phpから$ promo_data変数にアクセスできますか? – Geddy

+0

そこに$ promo_dataのコードが$ optionsにあったとします。 (#optionsとして$出力で宣言 - 単に#optionsを#promo_dataに変更するとうまくいくはずです)何をすべきかを反映するように変更しました。 – KerrM