Drupal 7のテーマを開発していて、次の問題に悩まされています。jQueryを介して修正があることがわかります。しかし、Drupal方法。
現在のHTML
<ul class="menu sf-js-enabled">
<li class="first leaf">
<a href="/" class="active">Home</a></li>
<li class="last expanded">
<a href="/node/57">About Us</a>
<ul class="menu sf-js-enabled" style="display: none; visibility: hidden;">
<li class="first leaf"><a href="/node/69">Contact Us</a></li>
<li class="last leaf"><a href="/node/73">Typhygraphy</a></li>
</ul>
</li>
そして、私はこのようなものが欲しい
<ul class="menu sf-js-enabled">
<li class="first leaf active">
<a href="/" class="active">Home</a></li>
<li class="last expanded">
<a href="/node/57">About Us</a>
<ul class="menu sf-js-enabled" style="display: none; visibility: hidden;">
<li class="first leaf"><a href="/node/69">Contact Us</a></li>
<li class="last leaf"><a href="/node/73">Typhygraphy</a></li>
</ul>
</li>
「アクティブ」クラスは、<li>
にも存在する必要があります。
JQueryがなくても目標を達成できます。 theme_menu_link() 関数、または(私の提案)theme_menu_link__your_menu()を使用するだけです
この関数をtemplate.phpファイルに配置します。
function YOURTHEME_menu_link(array $variables) {
$element = $variables['element'];
$sub_menu = '';
if ($element['#below']) {
$sub_menu = drupal_render($element['#below']);
}
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
// if link class is active, make li class as active too
if(strpos($output,"active")>0){
$element['#attributes']['class'][] = "active";
}
return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
この機能は、ブロックとして表示されるメニューにのみ使用できます。メインメニューのテーマを設定している場合:
admin/appearance/settings/yourtheme
に移動し、メインメニューをオフにします。admin/structure/block
に移動し、メインメニューブロックをヘッダー領域に配置します