web-dev-qa-db-ja.com

「body」にクラスを追加する

<body>タグを変更または前処理してクラス本体を追加するにはどうすればよいですか?クラスを追加するためだけにhtml.tpl.php全体を作成したくありません。

33
Chris Muench

テーマのtemplate.phpファイルはpreprocess_html 針:

function mytheme_preprocess_html(&$vars) {
  $vars['classes_array'][] = 'new-class';
}

フックを実装したらキャッシュをクリアすることを忘れないでください。そうしないとDrupalがそれを取得しません。

52
Clive

html.tpl.phpテンプレートのドキュメント は_$classes_変数をCSSを使用してコンテキストに応じてスタイルを設定できるクラスの文字列としてドキュメント化します。。テンプレートのコードを見ると、生成されたbody要素のクラス属性でこの変数が使用されています:

_<body class="<?php print $classes; ?>" <?php print $attributes;?>>
_

_$classes_変数は、実際にはテンプレートファイルの template_process() によって既に設定されており、_$classes_array_変数の内容からビルドされます。

したがって、ページの本文にクラスを追加するには、このクラスをテーマ(またはモジュール)のhook_preprocess_html()の実装の_$classes_array_値に追加する必要があります。

_function THEME_preprocess_html(&$variables) {
  $variables['classes_array'][] = 'new-class';
}
_

これはcoreで定義されたテンプレートおよびプロセス関数であるため、適切に動作するテーマは同じ変数を再利用する必要があります。

8
Pierre Buyle

それを機能させるには、同じフックで異なる配列キーを使用する必要がありました。

function THEME_preprocess_html(&$vars) {
  $vars['attributes_array']['class'][] = 'foo2';
}
3
Hannes Kirsman

Context モジュールを使用すると、bodyタグにクラスを追加することもできます。

これは、特定の条件下でクラスを追加する必要がある場合に役立ちます。

このオプションは、「テーマHTML」という反応の下にあります。

Theme HTML option in Context UI

2
batigolix

Common Body Class モジュールは、インターフェースを介して任意のページにクラスを追加するユーザーを提供します。インターフェイスには、複数のユーザーロールと、クラスをレンダリングできるページを選択するオプションがあります。

Example

答えはコンテキストに依存するようです。これが試行錯誤で見つけたものです。

Hook_preprocess_html()がモジュールにある場合、$ vars ['classes_array'] []を使用します。

テーマにある場合は、$ vars ['attributes_array'] ['class'] []を使用します。

1
jaskho

他の誰かが構築したサイトにこの手法を適用しました。最初は動作しませんでしたが、さらに掘り下げて、$ classes変数がtplファイルに出力されていないことがわかりました。動作しない場合は、確認してください。

0
user2390505