3

質問があります。

私は drupal 7 で Web サイトを作成しようとしていますが、いくつかの小さな問題を除いてほぼ完了しています。メイン メニューの最初のレベルには、それをcolumnalに統合するためにいくつかのカスタム css クラスが必要です。これが私が印刷する方法ですメインメニュー:

<?php
    print theme(
        'links__system_main_menu',
        array(
            'links' => $main_menu,
            'attributes' => array(
                            'id' => 'main-menu',
                            'class' => array('menu')
            )
        )
    );
?>

これは私が得るものです:

<ul id="main-menu" class="menu">
    <li class="menu-NNN first active">
        <a href="url" title="" class="active">Home</a>
    </li>
    <li class="menu-NNN">
        <a href="url">click me</a>
    </li>
    <li class="menu-NNN">
        <a href="url">click me</a>
    </li>
    <li class="menu-NNN">
        <a href="url">click me</a>
    </li>
    <li class="menu-NNN last">
        <a href="url">click me</a>
    </li>
</ul>

メイン メニューの最初のレベルに「col_1」クラスが必要です。

<ul id="main-menu" class="menu">
    <li class="menu-NNN first .col_1 active">
        <a href="url" title="" class="active">Home</a>
    </li>
    <li class="menu-NNN .col_1">
        <a href="url">click me</a>
    </li>
    <li class="menu-NNN .col_1">
        <a href="url">click me</a>
    </li>
    <li class="menu-NNN .col_1">
        <a href="url">click me</a>
    </li>
    <li class="menu-NNN .col_1 last">
        <a href="url">click me</a>
    </li>
</ul>

レイアウトは次のようになります。

/****************************************************************************************
*   *    .row                                                                       *   *
*   *********************************************************************************   *
*   *    #logo.col_5         *   * .pre_1|              .col_5              |.suf_1 *   *
*   *                        *   *       |                                  |       *   *
*   *                        *   *       |                                  |       *   *
*   *                        *   *       |__________________________________|       *   *
*   *                        *mar*       |.col_1|.col_1|.col_1|.col_1|.col_1|       *   *
*   *                        *gin*padding| menu1| menu2| menu3| menu4| menu5|padding*   *
*mar*********************************************************************************mar*
*gin*                                                                               *gin*
****************************************************************************************/
//I'm expecting to have just 5 links in the main menu

cssで幅とマージンを手動で設定できるかもしれませんが、これは正しいアプローチではないと思うので、「CSSを使用してすべてのサブ要素にプロパティを設定する」は機能しません。「MYTHEME_menu_link」も使用してみますが、メインメニュー以外のすべてのメニューにプロパティを追加するため、それも機能しません。

質問は次のとおりです。

css クラスを drupal のメイン メニューの最初のレベルに追加する別の方法はありますか?

4

3 に答える 3

2

独自のモジュールまたはテーマの template.php ファイルで同じ目標を達成しようとしている場合は、drupal のtheme_menu_link ()の独自の実装を使用できます。

サンプルコード:

function [THEME_OR_MODULE]_menu_link(array $variables) {
  $element = $variables['element'];
  $sub_menu = "";

  $element['#attributes']['class'][] = "col_1";

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
于 2012-07-03T12:47:46.690 に答える
1

MenuCSSNamesモジュールを使用してみてください。

于 2012-07-03T08:00:56.860 に答える
1

いくつかの調査の後。この記事(Drupal 7 で Bartik のドロップダウン メニューを作成する方法) に基づいて、回避策や外部モジュールを使用せずに目標を達成する方法を見つけました。変数「main_menu」をオーバーライドするために、必要な形式のメニューを含む文字列を使用して「THEME_process_page」を使用しました。

function MYTHEME_process_page(&$variables) {
    global $language;

if($variables['main_menu']){

    $tree = menu_tree(variable_get('menu_main_links_source', 'main-menu'));
    foreach($tree as $key => $val){

        if(isset($tree[$key]['#href'])){ //just to make sure this is a link

            if($language->language!=$tree[$key]["#localized_options"]["langcode"])
                unset($tree[$key]);
            else
                $tree[$key]['#attributes']['class'][] = 'col_1';

        }

    }

    $variables['main_menu'] = drupal_render($tree);

}

}

この変更の前は「main_menu」は配列でしたが、現在はメニューを含む文字列になっているため、今度は tamplate の関数「theme」を置き換える必要があります。

<?php
    print theme(
        'links__system_main_menu',
        array(
            'links' => $main_menu,
            'attributes' => array(
                            'id' => 'main-menu',
                            'class' => array('menu')
            )
        )
    );
?>

このようなもので;

<?php print $main_menu; ?>
于 2012-07-04T14:45:09.133 に答える