2011-08-23 1 views
6

Drupal 7サイト(テーマ名は "thompson")のメニューのメニュー項目の間にパイプ( "|")を追加したいと思います。これを行う最善の方法は、thompson_menu_linkというtemplate.phpファイルに関数を作成することだとわかりました。私はそれをして、それは正常にメニューを変更していますが、それはすべてのメニューを変更しています。私のサイト上の1つのメニューでこれを行う方法はありますか?特定のメニューのtheme_menu_linkを変更できますか?

現在、私のフッターメニュー(URLパス:menu-footer-menu)をフッターブロックに追加するために管理ページを使用しました。私はそれを別の方法と呼ぶべきでしょうか?

+0

採用したソリューションについて追加した部分は、回答として記載する必要があります。あなたが答えとしてそれを書いたなら、私はそれを上告します。 ':-)' – kiamlaluno

+0

申し訳ありません、新しいです。自分の質問に答えてそれを受け入れることが悪い形かどうかは分かりませんでした。 –

答えて

2

明らかにDrupalコアは、theme menu links by menu nameの機能を提供します。メインメニューの場合は、以下のテーマ機能は

THEMENAME_menu_link__main_menu() 

は別メニューブロックを作成するために Menu Blockモジュールを使用することができます動作するはずです。とりわけ、このモジュールはテーマの提案を追加します。モジュールのREADMEから:

メニューブロックはDrupalコアのメニューテーマ機能を使用します。しかし、 には、それによって呼び出されるテーマ関数 のいずれかをオーバーライドするために使用できるテーマフックの提案も用意されています。

  • [テーマ] _menu_link __ [メニュー名]()
  • [テーマ] _menu_link__menu_block()
  • [テーマ]:()のいずれかを作成することによって上書きすることができます...

    • theme_menu_link _menu_link__menu_block __ [メニュー名]()
    • [テーマ] _menu_link__menu_block __ [ブロックID番号]()
+0

これは受け入れられる回答である必要があります。小道具@ダニエルズ –

0

あなたはそれが次のモジュールをインストールされていることを確認することができます最善の方法:

http://drupal.org/project/menu_attributes

このモジュールは、あなただけのクラスrightpipeを追加する必要がありますので、あなたは、いくつかのメニュー項目に特別なクラスを追加することができますし、以下のようにそのクラスを定義します。

.rightpipe { border-right: 1px solid black } 

または

.rightpipe { background: url(1pixel_line_separator.png) no-repeat center right } 
2

私はちょっとthompson_menu_link()機能を使いこなしました。私はそれをやったのが好きではありませんが、仕事は終わりました。基本的には、メニュー名を読み込み、条件付きでパイプの後に<li>要素を返します。ここにブロック全体があります:

function thompson_menu_link(array $variables) { 
    $element = $variables['element']; 
    $menuName = $variables['element']["#original_link"]["menu_name"]; 
    $sub_menu = ''; 

    if ($element['#below']) { 
    $sub_menu = drupal_render($element['#below']); 
    } 

    $output = l($element['#title'], $element['#href'], $element['#localized_options']); 

    if ($menuName == "menu-footer-menu" && !in_array("last",$element['#attributes']['class']) { 
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>|\n"; 
    } 
    else { 
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n"; 
    } 

    return $finalString; 
} 
+1

if($ menuName == "menu-footer-menu" &&!in_array( "last"、$ element ['attributes]] [' class '] {。が必要です)最後にエラーがあります。 – canadiancreed

関連する問題