除了能覆写 CSS 指令以外,主题开发者还可以覆写模块的默认主题钩子。例如,我们可以在 Descartes 主题中创建一个简单的模板文件,以覆写 philquotes 模块的 theme_philquotes_quote() 函数提供的布局。
为了让主题引起意识到,这个模板是为了覆写 theme_philquotes_quote() 钩子,必须把它命名为 philquotes_quote.tpl.php。
做为示例,我们可以创建一个简单的模板drupal/sites/all/themes/descartes/philqyotes_quote.tpl.php,内容如下所示:
<?php // $Id$ ?> <div id="philquotes-text"> <?php print $text; ?> </div> <div id="philquotes-origin" style="background-color: #efefef"> <?php print $origin; ?> </div>
这个模板保持了以前模块中同样的基本结构,但是硬编码进了一个背景颜色。显示时,输出看起来象这样:

插图 4-10
注意出处(origin)部分的浅灰色背景,这是上面的模板加上的。
但是其它样式是怎么回事?为什么 origin 不再是斜体,正文的第一个字母也不再是放大的字母?
答案是,模板覆写了 theme_philquotes_quote() 函数,而正是那个函数负责用drupal_add_css() 添加样式表。
但是,加入了模板以后,就不再调用那个函数了,因此样式表也不会被加载。为了包含样式表,我们可以在主题的 .info 文件中添加适当的stylesheets[all][] 指令:
stylesheets[all][] = style.css stylesheets[all][] = new.css stylesheet[all][] = philquotes.css
模块提供默认的主题是有好处的,如果做得正确无误,将使 Drupal 的模块和主题系统发挥最大效果。模块永远不会缺少样式,不过主题开发者仍然有办法使模块的观感与站点的其它内容保持一致。
评论
发表新评论