※その後、再度調査して、全面的に書き直し。
Drupal5 版の page.tpl.php を書いていて、theme_links を使うか theme_menu_links を使うかでハマった件。
表示中のページに対応して、プライマリリンクのメニュー項目を強調表示させたいことがある。
Drupal では、表示中のページに対応する項目に class="active" という属性を付加する仕組みが用意されている。このクラス セレクタを通じて、CSS で適切なスタイルを指定すれば目的を達成できる。
ブックページと組み合わせれば、表示中ページの上位に位置するページのプライマリリンク項目にもこの属性を付けることができるので便利だが、テンプレートで theme_links を使うか theme_menu_links を使うかで動作が異なるので注意が必要。
theme_menu_links を使った場合:
表示中ページかその上位に位置するページのプライマリリンク項目の li 要素に属性 「class="active"」 が付く。
theme_links を使った場合:
表示中ページに対応する li 要素と中の a 要素に属性 「class="active"」 が付く。
そのページの上位のページに対応するプライマリリンクのメニュー項目にはこの属性が付かないので要注意。ただし、「class="menu-1-2-active"」 のように 「active」 という文字列を含んだ値の class 属性が付くので、これを基に判断するように関数をオーバーライドすることはできる (素直に theme_menu_links を使ったほうが楽だけど)。
詳しくは、上記の各関数のリンクからソースを参照。
標準テーマの bluemarine や pushbutton のテンプレートでは、プライマリリンクの表示に theme_links が使われている。これをそのまま流用していたら、アクティブなメニュー項目の強調表示がうまくいかず、上記に気付くまで半日以上つぶしてしまった。