回答:
前処理機能は、モジュールおよびテーマから実装できます。
必要な前処理関数はhook_preprocess_html()
で、設定する変数はです$variables['classes_array']
。これは、<body>
要素に設定されたすべてのクラスを含む配列です。Drupalがデフォルトで使用するhtml.tpl.phpファイルのコンテンツ(テーマが別のテンプレートファイルを使用しない場合)は次のとおりです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
"http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>>
<head profile="<?php print $grddl_profile; ?>">
<?php print $head; ?>
<title><?php print $head_title; ?></title>
<?php print $styles; ?>
<?php print $scripts; ?>
</head>
<body class="<?php print $classes; ?>" <?php print $attributes;?>>
<div id="skip-link">
<a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
</div>
<?php print $page_top; ?>
<?php print $page; ?>
<?php print $page_bottom; ?>
</body>
</html>
モジュールでは、次のようにプリプロセス関数を実装するだけです。
function mymodule_preprocess_html(&$variables) {
$variables['classes_array'][] = "new-class";
}
次に、template_process()を使用$variables['classes_array']
し$variables['classes']
て、次のコードを入力します。
$variables['classes'] = implode(' ', $variables['classes_array']);
サイトで複数のテーマを使用する場合、またはサイトに設定されたテーマが作成したテーマではない場合、モジュールでプリプロセス関数を使用することをお勧めします。この場合、カスタムCSSクラスを設定することができ、テーマを更新したり、サイトで使用されているデフォルトのテーマを単に変更したりしても、それらを失うことはありません。サイトでテーマのみを使用しており、そのテーマが作成したカスタムテーマである場合、カスタムテーマにプリプロセス機能を実装できます。テーマを維持するときに、テーマを更新するときにCSSクラスが失われません。
pathautoモジュールを使用して、メニューパスに基づいてコンテンツページのセマンティックパスを自動的に作成すると仮定すると、ページのパスを使用して、探しているクラスを作成できます。
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);
}
}
これはを介して実行できますtemplate_preprocess_html()
。これは、template.php
テーマ/ベーステーマが最も適切であると判断した場所(例:Omegaプリプロセスフォルダー)、または最も適切なものに応じてカスタムモジュールに配置できます。
function mytheme_preprocess_html(&$variables) {
$variables['classes_array'][] = "class1";
$variables['classes_array'][] = "class2";
$variables['classes_array'][] = "class3";
}
APIリファレンスの名前にもかかわらず、theme_preprocess
およびtheme_process
関数はテーマだけでなくモジュールから呼び出すことができます。あなたがする必要があるのは、あなたのモジュールにマッチするようにフックに名前を付けることですmymodule_preprocess_html()
。