web-dev-qa-db-ja.com

サブメニューのテーマ出力

次のようなメニューがあります。

<ul class="subpagemenu">
<li><a href="xx">xx</a>
  <ul>
  <li><a href="xx">xx</a></li>
  </ul>
</li>
<li><a href="xx">xx</a></li>
</ul>

最初のulにはクラスがあり、サブメニューulにはないことがわかります。

このコードを使用して、クラスをulに追加しています。

function mytheme_menu_tree__menu_mymenu($variables) {
    return '<ul class="subpagemenu">' . $variables['tree'] . '</ul>';
}

ただし、そのクラスはすべてのサブメニューに追加されます。

<ul class="subpagemenu">
<li><a href="xx">xx</a>
  <ul class="subpagemenu">
  <li><a href="xx">xx</a></li>
  </ul>
</li>
<li><a href="xx">xx</a></li>
</ul>

サブメニューにテーマを設定する方法はありますか?ありがとうございました。

4
user2171413
function mytheme_menu_tree__menu_mymenu($variables) {
  return '<ul class="subpagemenu">' . $variables['tree'] . '</ul>';
}

function mytheme_menu_tree__menu_mymenu_second($variables) {
  return '<ul>' . $variables['tree'] . '</ul>';
}

function mytheme_menu_link__menu_mymenu($variables) {
  $element = $variables['element'];

  $submenu = '';
  if ($element['#below']) {
    // You can set a theme wrapper here or put an empty array() only
    // and theme the second level directly by adding <ul></ul> one line below.
    $element['#below']['#theme_wrappers'] = array('menu_tree__menu_mymenu_second');
    $submenu = drupal_render($element['#below']);
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $submenu . "</li>\n";
}
1
deem