2011-12-07 8 views
-1

用テンプレートファイルIは、メニュー用テンプレートファイルを作成したい、と私はこのような何かしようとしています作成します。メニュー

function MYTHEME_menu_tree__main_menu($variables) { 
    return theme('mymainmenu', $variables); 
} 

を私は、mymainmenu.tpl.phpにメインメニューのHTMLを編集このコードは機能しません。どうして?

+2

'theme_mymainmenu'と' hook_theme'関数を投稿したいだけでなく、その問題の可能性が最も高いのはおそらく – Clive

答えて

1

ここで間違ったアプローチをしていると思います。 Drupal 7では、theme()メソッドをまったく呼び出す必要はありません。レンダリング可能な配列に焦点を当て、drupal_render()を呼び出して、あなたのためにtheme()を呼び出してください。道のうちそれと

、手であなたの問題に焦点を当てることができます:

あなたは私のhook_theme()の実装を作成する必要があります。このフックは、HTMLをレンダリングするために関数またはテンプレートファイルを使用しているかどうかを定義します。関数/テンプレートに渡す変数も定義します。この例では

mymodule_theme($existing, $type, $theme, $path) { 
    return array(
    'theme_name' => array(
     'variables' => array(
      'options' => NULL, 
     ) 
     'template' => 'theme-name' 
    ); 
} 

、「THEME_NAME」あなたはまた、変数(オプション)を渡すことができるようになります呼び出し:ここではhook_theme()の実装の簡単な例です。

その後、tpl.phpファイルを作成し、必要なHTMLとデータを入力します。テンプレートファイルまたは関数を作成しますが、両方を作成することはできません。

今、あなたのメニューのコールバックでは、あなたはそうのようなレンダリング可能な配列を返すようにしたい:あなたが参照しているすべてのあなたの方法を投稿した場合クライヴはコメントで述べたように

$output = array(
    '#theme' => 'theme-name', 
    '#options' => $aVariable, 
); 
return $output; 

は、それがより有用であろうあなたの問題は、私たちがあなたの問題をより正確に把握するためです。

+0

です。答えに感謝します!しかし、私はまだそれを得ることはできません、どこに私はこの機能を配置するのですか?私のtemplate.phpに?私はこれのためのモジュールを作成する必要がありますか?例えば、私がメインメニューを編集したいのであれば、私はこのように編集するのですか?ありがとう! – Alon

+0

はい、これのためのモジュールを作成し、そこでフック_theme()を実装する必要があります。コードを出力する部分は、モジュールファイル内から呼び出すこともできます。私はあなたがメインメニューでやってみたいことはかなり理解していません。可能であれば、メインメニューに要素を追加するには、AdministrationセクションのStructureインターフェイスを使用する必要があります。 – KerrM

+0

ありがとう、それを試してみてください。たとえば、

Alon