質問: drupal 7の詳細メニューのテーマ 私はwebを巡回しましたが、カスタムメニューのテーマを設定する方法はまったく明らかではありません。私は何時間も探しましたが、メニューを作成してその出力をカスタマイズするプロセスを最初から最後まで説明する投稿を1つも見つけていません。これは多段階のプロセスのようです: drupalインターフェースを介してメニューを作成します。 _template.php_ファイルにテーマ関数を作成して、出力のテーマを設定します。 このメニューを変数として追加して、テンプレートファイルに(どういうわけか)公開します。 テンプレートファイルのメニューでtheme関数を呼び出します。 1は簡単に実行でき、2、3、4で問題が発生します。デフォルトのページテンプレートを見ると、変数_$main_menu_のメインメニューが公開されていることがわかります。ページの後半で、関数_theme('links__system_main_menu', array('links' => $main_menu..._を確認できます。これは、適切な名前のテーマ関数をどこかで探し、それを使用して出力を生成していることを意味します。template.phpファイルにfunction theme_links__system_main_menu(&$variables) {...}を配置したかどうかはわかりますdrupalはfunction theme_menu_links(&$variables) {...}ではなくその関数を使用します。drupalがその関数で作成したカスタムメニューをどのようにリンクするかを知りません。たとえば、_my menu_というメニューを作成したとしましょう。次の関数を作成できますか?私の_template.php_ファイルとそのメニューの出力にテーマを設定しますか?function theme_links__system_my_menu(&$variables) {...}また、そのカスタムメニューをテンプレートファイルで使用できるようにするにはどうすればよいですか。 drupal _$main_menu_変数をpage.tpl.phpに公開する方法は?私がthinkここで欠けているキーは、カスタムメニューを表す変数をテンプレートページに埋め込む方法です。ほとんどの場合、メニューを作成した後、どうすればいいかわからなくなります。助けてくれてありがとう。編集:おそらく、私がしていることを投稿する必要があります。以下のbetarideへのコメントに従って、カスタマイズされたhtmlをメニュー項目の_<li>_要素に挿入する必要があります。具体的には、twitter bootstrapアイコンを追加しています。
回答: drupalのメニューの実装は少し特殊です。いつものように機能するとは限りません。 template_preprocess_page() のコア実装を見て、メインメニューのリンクを変数としてページテンプレートに追加する方法を確認できます。 apiドキュメントを少しドリルダウンする必要がありますが、theme_preprocess_page()の実装で呼び出す関数は menu_navigation_links() で、メニューにリンクの配列を返します。drupalコアの page.tpl.php ファイルの106行目を見ると、テンプレートでメインメニューリンクのテーマがどのように設定されているかがわかります 'links__system_main_menu'のフックを持つtheme( )関数。理論的には、この実装は、標準の命名規則に従うことにより、カスタムメニューと複製できるはずです。したがって、template.phpでは、次のようにすることができます。function themename_preprocess_page(&$variables){ $variables['custom_menu'] = menu_navigation_links('menu-custom-menu'); } function themename_links__menu_custom_menu(&$variables){ //custom theme function here } そして、page.tpl.phpに、次のようなものを追加します:<?php print theme('links__menu_custom_menu', array('links' => $custom_menu, 'attributes' => array('id' => 'custom-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('custom menu'))); ?> ただし、ページテンプレートの変数としてカスタムメニューを追加する必要はありません。 drupal管理インターフェイスを使用して、カスタムメニューのブロックを目的の領域に簡単に配置できます。また、サイトの設定を変更して メインメニューソース を効果的に置き換え、カスタムメニューを含むpage.tpl.phpのデフォルトの$ main_menu変数。編集:アイコンのメニュー項目にカスタムhtmlを追加するという最終目標が追加されただけです。これらのアイコンの追加方法に応じて、いくつかの異なるdrupalモジュールオプションがあります。 メニューアイコン -メニュー項目の設定を介して画像をアップロードし、メニュー項目の背景として画像を追加するcss(テンプレートを介してカスタマイズ可能)を自動的に生成します。 メニュー属性 -管理者の設定を介して各メニュー項目にカスタムクラスを追加できます。各メニュー項目に一意のクラスを追加したら、cssを使用してアイコンをメニュー項目に追加するか、javascriptを使用して追加のhtmlをメニュー項目に挿入できます。