私は何かを見逃していますか、それとも不可能ですかリンクアンカーHTML要素のテーマを設定します_<ul class="main-menu"><li><a href="" class="put something in here"></li></ul>
_テーマレベル(テーマ機能)のターゲットメニューの場合
_<li>
_要素とメニューブロック要素にHOOK_menu_link_MENU_NAME()でテーマを設定できます。それを私に指摘してくれた David Thomas に感謝します。しかし、ネストされたアンカー自体を対象とすることはできませんでした。 Devel配列の出力とdrupal.orgのドキュメントでは、theme_menu_item_link()
、_theme_links
_、theme_link()
などにしかアクセスできませんでしたが、ここではエレガントに表示する機会がありません。アンカー要素のCSSクラスの動的値を受け入れますか?
特定のメニューのul> liの_<a>
_要素にスタイルクラス属性を追加したい(すべてのメニューではなく、それがtheme_links()
が行うこと)...
ノート:
必要なcssクラスはレベル依存であり、上部のhtml要素に適用されるべきではないため、上部の要素を変更することによるネストされたcssターゲティングはここではオプションではありません。
そして、はい、私は menu_attributes モジュールを知っています。それは私が頻繁に使用する素晴らしいモジュールです。しかし、アプローチは異なります。 DBのメニューリンクデータを変更するのではなく、出力のみを変更します。
Drupal.orgのtheme_links()
関数には、そのスコープとその動作に関するいくつかの問題を指摘する問題があります: https://drupal.org/node/588148
theme_links() :一連のリンクのHTMLを返します。 => theme_links($ variables) https://drupal.org/node/588148 => theme_links()は実際にはテーマ化できない[#588148] => Drupalコア、テーマシステム、通常、作業が必要、49コメント、1 IRC言及
別のオプションは、アンカー要素内に_<span>
_要素を追加することです。私はすでにノードオブジェクトに対してこれを行いましたが、これがここで可能かどうか、これが正しい方法であるかどうかはわかりません。
編集:ここに2つの質問があります- 1 - 2 -stackexchangeでatmを読んでいます。多分それはすぐに私を啓発するでしょう...(ありがとう Clive 、私に2番目のものを指摘してくれました。)
this に基づくと、かなり単純なはずです。
function THEME_menu_link($vars) {
$element = $vars['element'];
$menuname = $element['#original_link']['menu_name'];
if ($element['#below']) {
$sub_menu = drupal_render($element['#below']);
}
// This is where you check the menu name and assign the class.
if($menuname == 'main-menu') {
$element['#localized_options']['attributes']['class'][] = 'main-menu-class-whatever';
$element['#localized_options']['attributes']['class'][] = 'another-class';
}
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . '</li>';
}
私はおそらくこれを上下逆さまに見ていますが、このメニューを自分でレンダリングしていますか。たとえば、どこかでtheme('links', $variables)
を呼び出しており、簡単に_$variables
_を変更できますか?
もしそうなら、theme_links()
関数自体をざっと見ると、次のコメントがわかります...
_/**
* Returns HTML for a set of links.
*
* @param $variables
* An associative array containing:
* - links: An associative array of links to be themed. The key for each link
* is used as its CSS class. Each link should be itself an array, with the
* following elements:
* - title: The link text.
* - href: The link URL. If omitted, the 'title' is shown as a plain text
* item in the links list.
* - html: (optional) Whether or not 'title' is HTML. If set, the title
* will not be passed through check_plain().
* - attributes: (optional) Attributes for the anchor, or for the <span>
* tag used in its place if no 'href' is supplied. If element 'class' is
* included, it must be an array of one or more class names.
* If the 'href' element is supplied, the entire link array is passed to
* l() as its $options parameter.
* - attributes: A keyed array of attributes for the UL containing the
* list of links.
*
* (rest of comment deleted)
*/
_
上記のコメントでも言及されているように、リンク自体を作成しているときに、コードの下の方にあるように、リンクごとにattributes
キーに入力する必要があることを示しています。 _$link
_パラメータ全体として_$options
_パラメータとして、たとえば...
_$output .= l($link['title'], $link['href'], $link);
_
したがって、特別なクラスを必要とするリンクに対して、attributes
のキーを持つ配列を指すclass
キーを作成し、そのキー自体がその名前を含む配列を指す場合、このクラスはアンカーに追加されます。