メインメニューのスタイルに合わせてhtml要素とそのクラスを生成したいと思います。
私はAPIドキュメントで提供されているほぼすべての可能性とコアテーマなどを見て混乱していますが、それでも私が何をしなければならないのか、どこでやらなければならないのかよくわかりません。
私は以下への明確な指針に非常に感謝します:
おそらく、MYTHEME.theme
では、item.attributes
がメニューの印刷に使用するattributes
およびlinks.html.twig
変数に追加するために、何らかの前処理関数が必要ですul
およびメニュー項目li
's。
[更新]これまでのところ、メインメニューのul
にクラスを配置する1つの方法を発見しましたが、理想的には、各サブメニューのul
にクラスを追加して、サブメニューの深さを示します。
メインメニューの個々のli
nkアイテムの生成/変更を理解できるドキュメントや例を見つけることができません。
この関数は、ファイルMYTHEME.theme
に入ります。
function MYTHEME_preprocess_page(&$variables) {
// Pass the main menu and secondary menu to the template as render arrays.
if (!empty($variables['main_menu'])) {
$variables['main_menu']['#attributes']['id'] = 'main-menu-links';
$variables['main_menu']['#attributes']['class'] = array('links', 'clearfix', 'MYNEW_class');
}
}
_menu--main.html.twig
_をテーマに保存して、メインメニューのtwigファイルを上書きします。元のmenu.html.twigを_/core/modules/system/templates/menu.html.twig
_または_/core/themes/classy/templates/navigation/menu.html.twig
_からコピーします。テーマは上品から拡張されます。
次に、メニュー出力の生成に使用される Twigマクロ を変更できます。レベルを示すulのクラスを取得するには、次のようにします。
_{% if menu_level == 0 %}
<ul{{ attributes.addClass('menu', 'menu-level--' ~ menu_level) }}>
{% else %}
<ul class="menu {{ 'menu-level--' ~ menu_level }}">
{% endif %}
_
Liと同様の操作を行うことができます。
_<li{{ item.attributes }}>
_
.addClass('class-name')
を次のような属性に追加するだけです:
<li{{ item.attributes.addClass('class-name') }}>
私のようなHTML /クラス名snobの場合は、次のようにクラスを削除することもできます:{{ item.attributes.removeClass('menu-item') }}
li
ループのfor
の上の行でこれを行いました。
すべてのレベルのアイテムを含むメインメニューを取得する方法が解決されました Drupal 8-"メニューリンクをプラグインとして実装"、メニューツリーを作成しようとしている
Ulとliにクラスを追加するには、3つのオプションがあります。
A. menuTreeサービスをオーバーライドします。
PS:クラスを追加するためにこれらの全体のオーバーライドを行う必要がある場合は、よくわかりません。
B.テーマレイヤーのツリービルドのみをオーバーライドする:
C. JavaScriptでDrupal.behaviors.MYTHEMEを使用する( https://www.drupal.org/project/gratis から)