使用自定义图片替换drupal种子(RSS)图标

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 08:34

最简单的方式是使用一个自定义图片来直接替换/misc/feed.png文件.如果不能这样做的话,你可以使用PHP来覆写默认的XML图标.

对于一个兼容PHPTemplate的主题,使用下面的步骤,你就可以轻松的将Drupal's feed icon图标替换为你自己的(不仅仅是边栏区块中的,对于页面底部的也同样适用).本文基于如何覆写一个主题函数的步骤.

Drupal版本:

排除drupal.css文件

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 08:06

可以通过覆写theme_stylesheet_import()函数来忽略drupal.css文件.只需要向主题的template.php文件中添加以下代码:

<?php
/*
  Do not include drupal's default style sheet in this theme !
*/
function phptemplate_stylesheet_import($stylesheet, $media = 'all') {
  if (strpos($stylesheet, 'misc/drupal.css') == 0) {
    return theme_stylesheet_import($stylesheet, $media);
  }
}
?>

Drupal版本:

例子:隐藏drupal日志消息

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 07:47

下面这个例子,讲述了在drupal中,如何使用主题函数来隐藏元素.这个例子向你展示了如何隐藏节点创建页面生成的日志消息.它将永远的隐藏日志消息盒子(box),所以,如果你将来需要用到这个盒子的话,就不能使用这段代码了.

 

<?php
/**
* Override node form
*/
function phptemplate_node_form($form) {
  // Remove 'Log message' text area
  $form['log']['#access'] = FALSE;
  return drupal_render($form);
}
?>

Drupal版本:

在你的drupal主题中对css进行聚合

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 07:35

Drupal内置的CSS聚合工作原理是,在"files/css"文件夹下,创建一个聚合文件,可以创建多个这样的聚合文件,比如当一个css文件在特定页面不需要时,而在另一个页面则用得到,这时就会新建一个聚合文件,通过$styles变量将其输出到page.tpl.php中。然而,这种方式对于部分人是行不通的,例如,将drupal运行在多台前台终端服务器上,但是却没有共享的"files"文件夹(它们可以与主服务器进行同步,而编辑则向主服务器添加内容),并且启用了缓存。在这种情况下,在部分前台终端服务器上css就显示不出来了,这是由于返回的是缓存页面,而没有检查css文件是否存在。

 

Drupal版本:

为维护(drupal Site Offline)页面自定义主题

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 06:02

Drupal 6.x提供了一种内置的phptemplate方式,对站点离线后的维护页面进行主题化---参看http://drupal.org/node/195435.

在Drupal 5.x中,许多帖子建议通过修改内核为该页面定制主题,但是这种想法很臭,而且没有必要,当然最后的结果也不一定好.下面是由Nax(http://drupal.org/user/25511)提出的一些比较好的方式,每种方式都有自己的优点:

 

Drupal版本:

template.php:覆写其它drupal主题函数

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 02:13

如果你要覆写的主题函数不包含在基本列表中(block, box, comment, node, page),你需要将它告诉给PHPTemplate.

 

为了实现这一点,你需要在你主题目录下,创建一个template.php文件.这个文件以PHP开始标签<?php,但是这里不需要结束标签,推荐你不要使用结束标签.还有,在文件中,还需要包含用于主题覆写的存根(stubs),这些存根告诉引擎使用哪个模板文件,以及向其中传递哪些参数.

 

没有区块的drupal区域

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 01:28

如果你想将内容指定到区域中,而又不通过区块来实现的话,你可以使用drupal_set_content()函数。这允许你绕过通常的区块机制,你可以尝试以下几点:

 

将内容设置到区域中

在你的模块代码中,将内容设置给区域。在这里,你可以使用themename_regions()数组中不存在的区域名。这样,这些区域对于区块来说就不可用,因此里面也就不会放置区块内容了。假定你的区域叫做'region1' 和'region2'。在你的模块中,可以这样做:

Drupal版本:

如何将drupal区域指定到节点,评论中

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 01:25

默认情况下,所有定义的区域都传递给page.tpl.php。但是只需要额外的几步,你也可以将特定的区域应用到其它的模板文件中:node.tpl.php,comment.tpl.php等等。下面是如何实现的。

在你定义区域的template.php文件中,定义一个_phptemplate_variables()函数(如果已经存在的话,就使用已有的)。在这里,你要做的就是将区域内容指定到一个特定的主题调用中。当调用_phptemplate_variables()时,将会向$hook变量传递一个主题参数,比如'node'。所以,使用下面的代码,我们可以将区域指定到节点模板文件中:

Drupal版本:

页面

Subscribe to Think in Drupal RSS