web-dev-qa-db-ja.com

Drupal 7)のメニューリンクにテーマを設定(追加のマークアップを追加)するにはどうすればよいですか?

次のように表示されるセカンダリメニューがあります。

_<ul class="secondarynav">
<li class="menu-428 first">
<a href="/content/page">PAGE</a>
</li>
...
_

これを変更して、次のようなリンクに_<span>_を表示します。

_<ul class="secondarynav">
<li class="menu-428 first">
<a href="/content/page"><span>PAGE</span></a>
</li>
...
_

Drupal 7 theme_menu_linkのドキュメントtheming Drupal 7メニューリンク に関するこの回答)によると、フックを次のように宣言できるはずです。 THEMENAME_menu_link__MENUNAME($variables)

_template.php_で次の2つの関数を宣言しましたが、どちらも呼び出されていません。

_function MYTEMPLATE_menu_link__system_secondary_menu(array $variables) {die;}
function MYTEMPLATE_menu_link__secondary_menu(array $variables) {die;}
_

私はフレームワークを使用しており、次のようなセクションがあります。

_if (isset($vars['secondary_menu'])) {
    $vars['secondary_menu'] = theme('links__system_secondary_menu', array(
        'links' => $vars['secondary_menu'],
        'attributes' => array(
        'class' => array('secondaryNavigation'),
    )
    ));
}
_

このメニューのみのメニューリンクで余分な_<span>_を印刷する最もクリーンでベストな方法は何ですか?

function MYTEMPLATE_links__system_secondary_menu(array $variables)を使用してメニュー全体を一度にテーマ化する関数を書くことができますが、各リンクで_<span>_を取得するためだけにメニュー全体をテーマ化することはやり過ぎのようです。

5
George

theme('links__system_secondary_menu')を呼び出します。デフォルトでは、_theme_links__system_secondary_menu_がないので、 theme_links を呼び出していると思います。関数を見ると、_THEMENAME_links__system_secondary_menu_としてテーマにコピーし、 l() の呼び出しを次のように変更するだけです。

_$link['html'] = TRUE;
$output .= l('<span class="whatever">' . $link['title'] . '</span>', $link['href'], $link);
_

_html => true_は必須です。そうでない場合、l()は最初のパラメーターからhtmlを取り除きます。

3
Capi Etheriel

カスタムメニュー(ユーザーが作成したもの)の場合、MENUNAMEはダッシュ(アンダースコアに変換されたメニュー編集ページにアクセスして取得可能)のマシン名です。したがって、「Secondary Menu」と呼ばれるメニューの場合、マシン名は「secondary_menu」に変換され、「secondary_menu」に変換されます(必ず確認してください)。したがって、THEMENAME_menu_link__secondary_menu(array $ variables)を実装する必要があります。

1
pferlito