2012-03-09 3 views
0

私はDrupal 7でブロックのスタイルを設定しようとしています。Drupal 7のメニューブロックのメニューリンクをスタイリング

メインメニューからすべてのリンクを取得するためにmenu_blockモジュールを使用しました。それは、ulにリンクを持つブロックを生成します。これは、各メニューツリーのdivとしてテーマを設定したいと思います。

スタイリング自体は簡単ですが、私はそれをスタイルするために使用すべきテーマフック/テンプレートファイル名を見つけることに本当に苦労しています。

私はtheme_menu_treetheme_menu_linkにフックしようとしましたが、テーマがあまりにも多すぎて、私がスタイリングしているものが見えません。私はmenu-tree--menu-block--main-menu.tpl.phpを試しましたが、変数は私が必要とするもののように何もありません。

私は、$contentという変数をblock.tpl.phpでスタイルする必要があると考えていましたが、特定のブロックに対してどのように行うのかわかりません。ブロック(ブロックタイプ)が(フッタに)表示されているときにメニューポイントのスタイルを設定したい場合、どこでフックする必要がありますか?

答えて

2

は、私が最も簡単な(必ずしも最良の)場所はhook_block_view_alter()

function MYMODULE_block_view_alter(&$data, $block) { 
if ($block->module == 'menu_block') { 
    // Extract the links from the available data 
    $links = element_children($data['content']['#content']); 
    $content = ''; 

    // Loop through the links and build up the required output. 
    foreach ($links as $link) { 
     $content .= '<div class="something">' . l($link['#title'], $link['#href']) . '</div>'; 
    } 

    // Assign the new output to the block content...done :) 
    $data['content'] = $content; 
    } 
} 

Devel moduleでこれを行うに考えると、それは、彼らはあなたが任意のPHPを調べてみましょうよ... dpm()機能は、ここにあなたの親友です便利です標準的なメッセージ領域できめ細かく構造化された形式の変数。まだインストールしていないのであれば、Drupalの開発には絶対必要です。

あなたがそのフックを実装すると、Drupalのキャッシュをクリアすることを忘れないでください。そうしないと、システムはそれを受け取らないでしょう。

+0

ありがとうございました!それは仕事でした:)しかし、$ data ['content']の内容を上書きするのは危険です。別のモジュールが同じことをしたら、私のコードは破損する可能性が高い:Sあなたは必ずしもこれが最良の方法ではないと言った。それを修正する方法は他にもありますか? –

+1

私は良い方法があるとは思っていませんが、その時にあったように感じました:)あなたのフックが最後に呼ばれていることを確認するには、モジュールの 'weight'カラムを'あなたが上書きしたコンテンツがいつも '勝つ'ことを確かにするでしょう。 – Clive

2

テンプレートとフックに正しく名前を付ける方法を理解しようとすると、非常によく似た問題が発生しました。グーグルは、(あまりにも多くのノイズを)助けにはならなかったが、最終的に私がdrupal.orgにMenu Block module documentationを試してみましたが、それは正しい方向に私を導く...

テンプレート:menu-block-wrapper--main-menu.tpl.php

<nav role="navigation" id="siteNavigation"> 
<?php echo render($content); ?> 
</nav> 

フック:THEMENAME_menu_tree__menu_block__MENUNAME()そしてTHEMENAME_menu_link__menu_block__MENUNAME()

function THEME_menu_tree__menu_block__main_menu($vars) { 
    return '<ul class="my-custom-menu-wrapper">' . $vars['tree'] . '</ul>'; 
} 

function THEME_menu_link__menu_block__main_menu($data) { 

    $el = $data['element']; 

    // ... render any classes or other attributes that need to go in this <li> 
    $attr = drupal_attributes($el['#attributes']); 

    // ... render the menu link 
    $link = l($el['#title'], $el['#href'], $el['#localized_options']); 

    // ... and render any submenus 
    $sub_menu = drupal_render($el['#below']); 

    return sprintf("\n<li %s>%s %s</li>", $attr, $link, $sub_menu); 
} 
0

あなたは< UL>

にCSSスタイルを置くことができ、印刷をテーマにしました
print theme('links', array('links' => menu_navigation_links($your_menu_name), 'attributes' => array('class'=> array('ul_class'))));