2

メニューブロックがhtmlで出力するものをテンプレートファイルで操作する方法に固執しています。liリンクを含む通常の<ulclass= "menu">は問題なく、drupalがすべてのメニューに対して作成するこのhtmlを完全に削除する必要はありませんが、システムのメインメニューのようにクラス「インライン」と「リンク」を挿入したいと思います。 (通常)すでにそのul要素の下にあります。ブロックをスキップしてテーマに直接メニューを印刷することもできますが、長期的には、生成されるメニューブロックの出力にクラス名を挿入する方法を学ぶ方が便利です。

これまでのところ、グーグルで検索するどころか、個々のliにIDとクラス名を入力できるモジュールを見つけることしかできませんでしたが、それらをラップするulは見つけることができず、遭遇した同様のテンプレートファイルスニペットを取得できませんでした。働くために。

これを行うためにフック関数を使用する方法はありませんか?

4

2 に答える 2

3

javascriptで必要なクラスを追加してみませんか?!

例:

jQuery("#MY_MENU_WRAPPER ul.menu").addClass("inline");

その場合は、テーマのtemplate.phpファイルで次のコードを試してください

function return_menu_markup($menu_name, $attributes)
{
    $items = array();
    $menu_tree = menu_tree_all_data($menu_name);
    $menu_tree_output = menu_tree_output($menu_tree);

    foreach($menu_tree_output as $item_id => $item_data)
    {
        if(is_numeric($item_id) && is_array($item_data))
        {
            $items[] = l('<span>' . $item_data['#title'] . '</span>', $item_data['#href'], array(
                    'attributes'    => $item_data['#attributes'],
                    'html'      => TRUE,
                )
            );
        }
    }
    return theme('item_list', array('items' => $items, 'type' => 'ul'));
}

次に、テンプレートの任意の場所で、次の手順を実行します。

$attributes = array();
$attributes['id'] = "MY_MENU_ID";
attributes['class'] = array('MY_CLASS_1', 'MY_CLASS_2', 'MY_CLASS_3');
return_menu_markup("main-menu", $attributes);

あなたが必要なものを見つけることを願っています:)

-ムハンマド。

于 2012-05-15T07:49:26.233 に答える
3

テーマフォルダで使用でき、フックを使用template.phpします。

function THEMENAME_menu_tree__menu_main_navigation($variables){
    return "<ul class=\"inline\">\n" . $variables['tree'] ."</ul>\n";
}

menu_main_navigationまた、これはメニューのURLパスであり、他の値は常に同じであることに注意してください。キャッシュを数回削除します。すぐに機能させたい場合があります。

于 2012-05-15T20:23:13.143 に答える