web-dev-qa-db-ja.com

ページパス/深度に基づいてクラスをBODYタグに動的に追加する方法

以下の例のように、クラスをbodyタグに動的に追加する方法は?

-ホーム
-都市
-メルボルン<body class="melbourne">
- -テーマパーク <body class="melbourne theme_parks">
---レストラン<body class="melbourne restaurants">
- ニューヨーク <body class="new_york">
- -テーマパーク <body class="new_york theme_parks">
---レストラン<body class="new_york restaurants">
-お問い合わせ <body class="contact_us">

Drupalの初心者で、プログラミングのバックグラウンドはありません。したがって、ソリューションを共有するときに、できるだけ詳細に説明していただければ幸いです。

21
kyooriouskoala

Nikhil Mohanの答えを詳しく説明するには、テーマのtemplate.phpファイル内に template_preprocess_html() を実装できます。 Themable出力のオーバーライド に関するドキュメントを読んで、ここで行われていることの基本を理解してください。

この関数内で、ページのHTML _$vars['classes_array']_タグに適用されるクラスのリストを保持する変数_<body>_にアクセスできます。

残念ながら、メニュー内の現在のページの場所に関する情報はすぐには利用できません。 menu_get_item() を使用し、次に menu_get_ancestors() を使用してこの情報を取得できますが、これは、おそらくsimpilerアプローチで到達できます。

Pathautoモジュールを使用して、メニューパスに基づいてコンテンツページのセマンティックパスを自動的に作成している(つまり、メルボルンのテーマパークページにパス 'melbourne/theme_parks'がある)場合、ページのパスを使用してクラスを作成できます。探しています:

_function THEMENAME_preprocess_html(&$vars) {
  $path = drupal_get_path_alias();
  $aliases = explode('/', $path);

  foreach($aliases as $alias) {
    $vars['classes_array'][] = drupal_clean_css_identifier($alias);
  } 
}
_

それでおしまい。 Drupalは現在のページのパスエイリアスを確認し、パスエイリアスの各チャンクの_<body>_タグにクラスを追加します。

37
sheena_d

template_preprocess_html 、html.tpl.phpの前処理変数

参照 html.tpl.php

単一のDrupalページの基本的なhtml構造を表示するためのデフォルトのテーマ実装

1
niksmac

これは、ロールまたはページに基づいてbodyタグにクラスを追加するモジュールです。

共通ボディクラス

これを支援するために Body Classes Drupal module を作成しました。問題を作成して、さらに体クラス統合ポイントを追加してください。

0
RobLoach