<body>
タグを変更または前処理してクラス本体を追加するにはどうすればよいですか?クラスを追加するためだけにhtml.tpl.php全体を作成したくありません。
テーマのtemplate.php
ファイルはpreprocess_html
針:
function mytheme_preprocess_html(&$vars) {
$vars['classes_array'][] = 'new-class';
}
フックを実装したらキャッシュをクリアすることを忘れないでください。そうしないとDrupalがそれを取得しません。
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で定義されたテンプレートおよびプロセス関数であるため、適切に動作するテーマは同じ変数を再利用する必要があります。
それを機能させるには、同じフックで異なる配列キーを使用する必要がありました。
function THEME_preprocess_html(&$vars) {
$vars['attributes_array']['class'][] = 'foo2';
}
Context モジュールを使用すると、bodyタグにクラスを追加することもできます。
これは、特定の条件下でクラスを追加する必要がある場合に役立ちます。
このオプションは、「テーマHTML」という反応の下にあります。
Common Body Class モジュールは、インターフェースを介して任意のページにクラスを追加するユーザーを提供します。インターフェイスには、複数のユーザーロールと、クラスをレンダリングできるページを選択するオプションがあります。
答えはコンテキストに依存するようです。これが試行錯誤で見つけたものです。
Hook_preprocess_html()がモジュールにある場合、$ vars ['classes_array'] []を使用します。
テーマにある場合は、$ vars ['attributes_array'] ['class'] []を使用します。
他の誰かが構築したサイトにこの手法を適用しました。最初は動作しませんでしたが、さらに掘り下げて、$ classes変数がtplファイルに出力されていないことがわかりました。動作しない場合は、確認してください。