Answers:
预处理功能可以通过模块和主题来实现。
您需要的预处理功能是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类别不会丢失。
您可以通过进行此操作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
and theme_process
函数。您需要做的就是命名该挂钩以匹配您的模块,例如mymodule_preprocess_html()
。