drupal-添加样式表

前面,theme_philquotes_quote() 函数把名言的正文(text)和起源(origin)包装在两个 <div/> 标签中,每个标签都有一个唯一的 id 属性:

  • philquotes-text
  • philquotes-origin

使用这些 ID,我们可以创建样式表,为这两个元素添加样式。

习惯上,模块的主样式表应该命名为 <module_name>.css (其中<module_name> 是模块的名字)。与其它模块文件一样,这个文件放在模块目录中(本例中为drupal/sites/all/modules/philquotes)。我们的 philquotes.css 文件如下所示:

 

#philquotes-text:first-letter {
  font-size: 18pt;
  font-weight: bold;
}
#philquotes-origin {
  font-style: oblique;
  text-align: right;
  margin-right: 5px;
}

现在我们有了一个简单的样式表。使用它时,将为原本平淡的 HTML 添加一些样式。

 

不过,只是有了样式表(并正确地命名)还不够,还无法把它加入默认主题。Drupal 进行页面渲染时不会自动包含模块的样式表。我们必须告诉主题系统把它纳入其中。

添加样式表是用内建函数 drupal_add_css() 完成的。在theme_philquotes_quote() 钩子中使用这个函数,就可以通知主题系统把模块的CSS文件与其它样式表一起罗列在发给客户的 HTML 中。

 

function theme_philquotes_quote($text, $origin) {
    $module_path = drupal_get_path('module', 'philquotes');
    $full_path = $module_path .'/philquotes.css';
    drupal_add_css($full_path);
    $output = '<div id="philquotes-text">'. t($text)
	.'</div><div id="philquotes-origin">' . t($origin) . '</div>';
    return $output;
}

上面高亮的几行显示出所做的修改。在 Drupal 装入样式表之前,它必须知道样式表所在位置的完整路径。CSS文件在我们的模块中,我们可以用drupal_get_path() 函数构建完整路径。我们把 /philquotes.css 附加在drupal_get_path() 返回的字符串后面。

 

drupal_get_path() 是另一个很有用的函数,在模块开发中常会用到。它接受两个参数。

第一个是元素类型,对于模块开发者来说,通常是 theme 或者 module,这取决于路径是主题的还是模块的。第二个参数是想要获取其路径的主题或模块的名字。要想获得我们上一章中创建的 Descartes 主题的路径,我们可以用drupal_get_path('theme', 'descartes')。

提示:drupal_get_path() 的细节,参见http://api.drupal.com/api/function/drupal_get_path.

现在我们可以把 $full_path 传入 drupal_add_css(),当使用这个模块时,它将在输出的 HTML 的头部加入一个指向我们的 CSS 文件的 link。我们的模块输出看起来应该象下面这样:


插图 4-8

加上我们的样式表以后,philquotes 模块的输出就是有样式的了。

到目前为止,我们所做的工作就是为我们的模块创建默认主题。但是,既然我们可以把 HTML 硬编码到模块中,为什么还要费这么多麻烦事儿呢?

这里有个非常好的理由。

通过创建一个默认主题,我们能确保模块的正确显示,不论主题开发者是否针对我们的模块创建模板或主题函数。

另外,通过使用主题系统,使主题设计者可以覆写(或修改)我们的默认主题。因此,主题开发者可以改变我们的模块的布局和样式,而不用修改一行模块代码。

在下一节中,我们将看到这是如何做到的。

评论

发表新评论

此内容将保密,不会被其他人看见。
  • 允许HTML标签:<a> <img><em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p>
  • 自动断行和分段。

更多关於格式化选项的信息

Image CAPTCHA
验证码
|