web-dev-qa-db-ja.com

Superfishメニューを使用するときにメニュー構造を変更する

Superfish メニューを使用しています。メニューリンクの各<span>タグの前に<a>タグを追加したいと思いました。私は次のコードを試しました:

function mytheme_menu_link($variables) {
    $element = $variables['element'];
    $sub_menu = '';
    if (empty($element['localized_options'])) {
        $element['localized_options'] = array();
    }
    $element['localized_options']['html'] = TRUE; //let l function know that our link title includes html
    $output = l($element['#title'], $element['#href'], $element['#localized_options']);
    return '<li' . drupal_attributes($element['#attributes']) . '><span>' . $output . "</span></li>\n";
}

しかし、効果はありませんでした。 Superfishメニューを使用しているので、他のコードを記述する必要がありますか?

3
Hacker

Superfishモジュールは通常のDrupalメニューのテーマフックをバイパスし、独自のフックを実装します。これらの周りのHTMLを変更するには、 theme_superfish() 関数をオーバーライドする必要がありますメニュー項目。その関数を superfish.module をテーマのtemplate.phpファイル。関数名の「theme」という単語をテーマのマシン名に置き換えて、編集します。

8
sheena_d

これは、管理インターフェースを介して簡単に実行できます。 theme_superfish_build() をオーバーライドすることもできますが、そのタスクにはより簡単な解決策があります:

  1. admin/structure/blockに移動し、所定のSuperfishブロックを検索して、[構成]をクリックします。例えば。私のテストDrupalでは、 "Superfish 4"ブロックを編集します(私の場合、パスは次のとおりです:admin/structure/block/manage/superfish/4/configure):- Configuring Superfish block
  2. 「HTMLの詳細設定」までスクロールし、フィールドセットを展開し、「HTMLラッパー」サブフィールドセット、 "ハイパーリンクの周り"というフィールドがあります( "ハイパーリンクのコンテンツの周り")に、次のように入力します。

    <span class="this-is-your-span-class">,</span>
    

    HTML Wrappers in Superfish

  3. ブロックを保存すれば完了です。


スクリーンショット

Superfish menu - hyperlink without a '<span>' wrapper

Superfish menu - hyperlink with a '<span>' wrapper

4
Sk8erPeter