conky 格言妙语
通过本文你将学到 自定义”唐诗宋词”模块来实现:

当我开始写”唐诗宋词“之前根本没有想到要输出”唐诗300 首”,因为当时在开始接触 设计模式,所以想用PHP写个东西玩玩,当时那些默认模块(唐诗300、宋词100、增广贤文、谚语……)已经被人用shell写成conky的脚本长期定居于我的linux桌面上,那么材料就是它了。实际上这个东西写法类似于设计模式中的策略模式(Strategy), 每加一个模块,只要根据接口重写一个函数即可。最简单的莫过于显示单句了,请看下面这个例子:


1.每日一句拽言牛语

这个和 “每日一句警言” 同类,只不过材料不同。网络上有很多拽言牛语,那么要是每天在blog上显示一句,拽就一个字。ok,首先选用 “2008最新的100句超牛的语言” 作为原料,按照下面的组识形式写入文件 “niuyu2008″ ,编码为UTF-8。

再牛b的肖邦,也弹不出老子的悲伤!
%
我左青龙,右白虎,肩膀纹个米老鼠。
%
秃驴,敢跟贫道抢师太?
%

每一句牛语后换行加一个 “%” 号,头可乱格式不能乱! 至于怎么把这么多句子格式化,随你写脚本、用程序 or 徒手…… whatever.

改好后把 “niuyu2008″ 移到”唐诗宋词”插件的根目录下。使用支持UTF-8的编辑器打开文件 “poem-models.php” ,你会发现文件结尾有一段注释: /* Add-Ons 自定义模块 */ 就是这里了,在下面添加代码即可。


class niuyu2008 implements Poem_Inter {
public function format_poem($poem_src) {
$poem_array = preg_split(‘/\n/’ , $poem_src, -1, PREG_SPLIT_NO_EMPTY);
return $poem_array[0];
} //END func format_poem
} //END class niuyu2008

保存后在你blog皮肤中需要显示的地方插入:

< ?php
if (function_exists(show_chinese_poetry))
show_chinese_poetry(array('niuyu2008'), FALSE, 1440);
?>

函数 show_chinese_poetry 能根据时间更新(需要注意的是:使用该函数必须保证插件目录下的 “poem.tmp”文件全局可写(权限为666),可以用命令 chmod 666 poem.tmp 来修改,或者FTP工具也可。), 一天的时间是1440分钟,自己按需要改吧。至于中间的 ‘FALSE’, 是CSS风格参数,为默认模块设计的,自己看poem.css文件吧。 如果是每次刷新换一条牛语,就用 show_chinese_poem ,比 show_chinese_poetry 函数少了时间参数。如果你想在Widget里显示,可以使用0.2版提供的widget配置选项。

最后解释一下第一段代码: 每一个模块需要有原料文件(”niuyu2008″)、 段处理类(class niuyu2008) 和类中的 文本段处理函数(function format_poem)。 原料文件只要注意格式即可,类名必须和原料文件相同,类需实现 Poem_Inter 接口,重载 format_poem 函数。

最后是 format_poem 函数, 从参数 $poem_src 得到的是一个文本段,如下

道,可道,非恒道。
名,可名,非恒名。
无名,天地之始;
有名,万物之母。
故常无欲,以观其妙;
常有欲,以观其徼。
此两者同出而异名,同谓之玄。
玄之又玄,众妙之门。
  --《道德经》
%

注意文本段是包含换行符 和 “%”的,所以我们要做的就是截取需要的,第一段代码中此函数的第一句就是把文本段分行存入 $poem_array 数组中,然后return 需要的文本(字符串)即可,同时也可处理一下字符串,去除不规范字符什么的。

我不反对用 “2007年度里最拽最经典的只言片语” ,但这个文本块不是一行,自己修改一下,或是参考”默认模块”。

2.随机显示一条名言警句,并安置在Blog首页的浏览器标题栏

前辈Yskin写过一个WP插件:Wisdom Title,可以在在Blog首页的浏览器标题栏随机显示一条名言警句。没错,就是VeryCD首页的效果。 现在我们也来给”唐诗宋词“加一个类似的模块。首先和上面相同,搜集一些名言警句,这里先偷个懒,借前辈的劳动成果用一下,把原料按格式保存到插件目录下的 “wisdom” 文件中。接着写代码… 老样子,在 文件 “poem-models.php” 最后的注释(/* Add-Ons 自定义模块 */)后面加入:


/**
* wisdom: 名言警句
* 用于blog首页的浏览器标题栏显示
*/
class wisdom implements Poem_Inter {
/**
* @see Poem_Inter::format_poem()
*
* @param string $poem_src
*/
public function format_poem($poem_src) {
$poem_array = preg_split(‘/\n/’ , $poem_src, -1, PREG_SPLIT_NO_EMPTY);
$title_add = trim($poem_array[0]);
$js_code = ““;
return $js_code;
} //END func format_poem
} //END class wisdom

代码完成, 在 WordPress 皮肤的 “header.php” 中的标记 </head> 前加入:

< ?php
if (is_home() && function_exists(show_chinese_poem))
show_chinese_poem(array('wisdom'), FALSE);
?>

注意:一定加上 is_home() 这个判断,不然所有的页面浏览器标题都会加上一句警言了哦。 显示的函数选择 show_chinese_poem 。

假如很不巧你的博客名字是这样的: “水草树 – 大树底下好乘凉” ,而不是单单的 “水草树” ,那么javascript就得换一个版本了。使用正则表达式就可以解决。



3.随机显示图片

到这里实在没什么了,如果你明白上面两个例子,就不用说了。因为完成这个功能需要把图片的URL按格式写入文本文件中,谁会这么无聊? 说我忽悠也行,给出个class了事。


class image implements Poem_Inter {
public function format_poem($poem_src) {
$poem_array = preg_split(‘/\n/’ , $poem_src, -1, PREG_SPLIT_NO_EMPTY);
return ““;
} //END func format_poem
} //END class image

本文所用到的原料和添加的代码下载: modules-addon.zip

小结:当时接触设计模式,很好奇,手痒,写了这个东东。 这个插件就到此为止吧,没什么有用的功能,后来的代码也乱了,实在不想说”小华哥”经常说的那两个字。