web-dev-qa-db-ja.com

クラスをメインメニューリンクに追加する

私はこの質問のバリエーションを検索して見つけましたが、うまくいくように見える答えを見つけたことがありません。 <li>要素にクラスを追加する必要があります。現在、メインメニューは次のようにレンダリングされています。

print theme('links__system_main_menu', array(
    'links' => $main_menu,
    'attributes' => array(
        'id' => 'slidemenu',
        'class' => array(
            'links',
            'inline',
            'clearfix'
        )
    ),
    'heading' => t('')
));

私の知る限り、これはメインメニューの<ul>要素のみを設定するので、'links'パーツの属性を編集する方法があるかどうか疑問に思っていました。

---編集---

わかった、解決したと思う。どうやら、テンプレートでtheme_links__system_main_menuを使用して全体を上書きできます。私はこれをやった:

function mytheme_links__system_main_menu($variables) {
    $html = '<div id="mainmenu">';
    $html .= '  <ul id="slidemenu" class="clearfix">';

    static $linkClass = 1;

    foreach ($variables['links'] as $link) {                
        $html .= '<li class="themastyle' . $linkClass . '">' . l($link['title'], $link['href'], $link) . '</li>';
        ++$linkClass;
    }

    $html .= '  </ul>';
    $html .= '</div>';

    return $html;
}

これが正しいDrupalかどうかは完全にはわかりませんが、問題は解決しました!

5
Zedicius

print_r($main_menu);$main_menuアイテムは、次の構造を持つ必要があります。

array(
    'title' => 'xxx',
    'href' => 'xxx',
    'attributes' => array(
        'class' => array('xxx'),
    ),
);

そのため、$main_menu配列を変更して、liにクラスを追加できます。

1

メニュー属性 は、classidrelおよびその他の属性をaに設定できるもう1つの優れたモジュールですまたはli要素。

3
daniels

既存のモジュールを使用しても構わない場合は、 メニュー名CSS を使用することもできます。このモジュールは、メニュー項目のターゲットパスをサニタイズされたcssクラスとしてli-itemに追加します。

2番目の利点は、コードの再利用性を高めるために、モジュールがテンプレートでなく、モジュールに機能を配置する優れたテンプレートであることです。

0
Nebel54