Archive for the 'Blog' Category

Dissect WordPress Plugin

一直对软件的组件、插件架构非常感兴趣,我认为现在开发任何应用程序,一定要有一个架构良好的插件机制,这样可以吸引其他人来开发插件,极大的扩充系统的功能。Eclipse就是一个非常棒的例子,几乎你想什么功能,都可以从社区中找到相应的第三方插件。Firefox也同样如此,它的插件机制非常灵活(尤其是相对IE而言),因此Firefox社区中可以找到各种各样的插件。
就像Nat在Open Source Summit中的一句话:

You have to give people work to do.
Create an “architecture of participation” as Tim O’Reilly says.

自从开始使用WordPress,就想学习学习WordPress强大的插件机制。以前曾经研究过的COM、XPCOM、Firefox Extensions、Eclipse Plugin都是桌面应用级别的组件结构,而对Web应用中的插件确实知之甚少,于是,Dissect了一下WordPress(1.5.1.3)。虽然对PHP不是很熟悉,不过看看源码还是问题不大。
1)WordPress读取所有可用的插件
在文件“admin-functions.php”中,函数
<?php function get_plugins() ?> ?>
用来从文件系统得到所有的插件。原理很简单,就是读取’wp-content/plugins’目录下的所有PHP文件。这个函数允许一级的子文件夹,也就是说在’wp-content/plugins’下面的PHP文件,以及所以在此目录下的一级子文件夹内部的PHP文件被列作插件的候选,用下面的函数去进一步提取插件信息。这样的好处是方便用户利用文件夹来对插件进行管理和组织。
而函数
<?php function get_plugin_data() ?>
用来得到插件的描述(Plugin Descriptor),主要包括插件的版本、名称、作者,等信息,而这些其实是以注释的方式存在的。用WordPress中自带的Hello插件来举例:
<?php 
Plugin Name: Hello Dolly
Plugin URI: http://wordpress.org/#
Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire …
Author: Matt Mullenweg
Version: 1.0
Author URI: http://photomatt.net/
 ?>
这样,在get_plugin_data函数中,就可以来得到插件的详细信息。
<?php 
function get_plugin_data($plugin_file) {
    $plugin_data = implode(”, file($plugin_file));
    preg_match("|Plugin Name:(.*)|i", $plugin_data, $plugin_name);
    preg_match("|Plugin URI:(.*)|i", $plugin_data, $plugin_uri);
    preg_match("|Description:(.*)|i", $plugin_data, $description);
    preg_match("|Author:(.*)|i", $plugin_data, $author_name);
    preg_match("|Author URI:(.*)|i", […]

Popularity: 38%

Upgrade to WordPress 1.5.1.3

WordPress.org昨天宣布放出了最新的WP版本-1.5.1.3,这个版本主要是解决一个潜在还没有被公开的安全漏洞(应该与XMLRPC有关,如果你无法马上升级,可以删除xmlrpc.php文件来保证安全性)。WordPress.org宣布他们正在实现其它一些令人兴奋的Feature,不知会是什么:-)。
升级过程非常简单,备份原有文件,包括:

WP-Config.php
安装的Plugin文件
安装的Theme文件
以及其它修改过的文件(比如Index.php)

删除老版本的WP文件,使用新的WP代替,并将备份文件安装。然后执行“/wp-admin/upgrade.php”即可。如果试验没问题,就会更新Xerdoc Together。
Popularity: 22%

Popularity: 22%

My WordPress Plugins

终于下定决心从MT牵移到WordPress,原因有二:免费、开源。
牵移过程非常简单,首先从MT导出数据,然后用WordPress中的“import-mt.php”脚本导入就可以了。详细过程可以参考《Moving from movable type to WordPress》。
周五晚上用了2个小时做了一个和原来用MT时候一样的模板,整理一下会共享出来。:-)
一直听说WordPress的插件非常强大,事实证明,确实如此。闲下来一定要好好研究一下。我目前装的WordPress的插件主要有:
1) Google Sitemap Generator for WordPress
Google推出Sitemap协议来简化爬虫的工作,更好的进行网站的索引。利用Sitemap协议,网站的更新可以自动的Ping到Google,Google只需要订阅这些信息源,这样可以更好的收录网站的内容。这个过程很像我们订阅RSS信息源,把随意的信息获取变为信息的主动推送。
MT和WordPress对Sitemap都有很好的支持。MT中比较好的是《Google Sitemaps using Movable Type》,只需新建一个模板,然后每次Rebuild的时候重新生成Sitemap.xml文件。
我用的WordPress的Sitemap插件是《Google Sitemap Generator for WordPress》,最新版本是2.5。这个插件非常强大,而且安装简单,只需把下载的文件解压放到Plugin目录下,然后激活插件,就可以看到在Option下多了一个Sitemap选项。在这个选项中,我们可以设定Sitemap生成的一些选项,比如站点文件范围、更新频率等等,甚至还能够直接Ping到Google,通知更新。
2) WordPress FeedBurner Plugin
我使用Feedburner来烧制了我的RSS,在用MT时只是在页面上显示了FeedBurner的RSS源。这个插件可以把页面Link Meta中的各种RSS源,包括RSS0.9、RSS2.0、RDF、ATOM都通过URL重写来定位到你在Feedburner的Feed地址。
Update(2005.07.01):任何中心化的服务都由其固有的风险,其自身的服务运营能力是一方面,我们的大墙又是另一个因素:(。搞IT的都知道,任何问题都可以通过增加一层的抽象和Wrapper来解决问题,Feedburner的Wapper可以方便的帮助我们隐藏实际的Feed的细节,那么,我们也可以再来Wrapper一下:)。
Feedburner Plugin的原理就是一个重定向,因此,无需任何Hack,只要把你在Feedburner Plugin里面重定向的URL变成你的再次加工的Wrapper URL即可,对于我来说,就是输入:http://feed.mengyan.org/(feed.mengyan.org这个子域名指向了Feedburner,今后可以指向其它的地方)。
3) StatTraq
StatTraq是一个强大的WordPress日志分析插件,可以非常详细的分析你Blog的访问情况(比如浏览量,访问人数,搜索引擎关键字,反向链接等)。安装过程非常简单:下载最新版本的插件,解压后放到你的WP安装目录中(包括一个插件以及一个“wp-stattraq”的文件夹)。首先运行/wp-stattraq/stattraq-install.php来完成一些必要的数据库建表操作,然后删除此文件。最后进行插件激活就可以运行了(http://yoursite/wp-stattraq/index.php)。
Update (2005.06.30): 开始我的日志中无法看到详细的PageView,只是简单的Mix Post和Feed,很奇怪,于是Hack了一下StatTraq,最后发现他是ArticleID来记录访问的单个日志。因此,如果你希望有详细的PageView,你的Permalinks中必须包含PostID(宏%post_id%)。
Update (2005.08.30): Hack一下,增加对Baidu、Sogou这两个中国搜索引擎的支持。
4) Jerome’s Keywords
网站支持Tag绝对是非常必要的,Tag有利于我们更好的组织、搜索以及分享自己的文章。Jerome’s Keywords其实是一个WordPress的Tag插件,它可以:
方便的为你的文章添加关键字(其实就是Tag)
利用关键字来进行站内搜索
被Blog搜索引擎Technoratis搜索(在Atom Fees中添加Tag信息)
实现站内的类似Flickr,Delicious的Tag云
在网页头的Meta中添加Tag的关键字信息(虽然由于Spam的原因,Meta Keywords已经不在被大多数搜索引擎所使用了)
安装过程非常简单,首先将下载后的文件解压缩至Plugins文件夹,然后激活插件,还需要重新保存Options中的Permalinks选项,以便重写.htaccess。接下来会发现在Write的时候Content下面多了一个Keyword的输入区域,就是用来输入关键字(默认以“,”作为分隔)。
怎样显示文章的Tag?
将这句Tags: <?php the_post_keytags(); ?>加到要显示Tag的地方。还可以用参数来调整输出,包括“是否把分类转为Tag”、“站内Search还是Technoratis”、“链接标题”等等。
怎样创建Tag云?
创建一个新的模板文件,可以参考Jerome给出的例子。然后在管理页面中新建一页,将页面命名(post-slug)为“Tags”或者“Cosmos”,并把此页的模板选定为刚才创建的模板,保存即可。有一个问题是all_keywords()函数中的链接用的是绝对链接“/tag/%keylink%”,因此如果你用了转向的话,可能需要调整这个参数。
怎样在网页头中添加Meta信息?
只需在网页头的区域内(在<head>和</head>之间)添加<meta name=”keywords” content=”<?php the_keywords(); ?>” />即可。
Update(2006.01.19):
最终,这个插件还是被Ultimate Tag Warrior所替代了。
5) Recent Post、Recent Comments、Most Commented
这三个插件都是Nick Momrik的作品。顾名思义,分别是用来显示“最新文章”、“最新留言”以及“最多留言的文章”的。如果感兴趣还可以在他的主页上找到很多有趣的插件。
这三个插件的工作原理很简单,通过数据库查询得到要显示的信息,然后直接“Echo”出来。控制格式则是你需要通过CSS来进行的。
安装也非常简单,只需要把相关的插件文件(PHP)解压到Plugin目录下,然后激活插件,就可以利用插件中提供的API函数来输出了。这三个插件的Readme文件非常详细的说明了插件API的参数,我使用的参数为:
mdv_recent_posts(5, ‘<li>’, ‘</li>’, true, […]

Popularity: 68%

上周修改了一个MT的模板,根据我在SUN的Blog中的一个叫做Metal的模板。
开始Blog快有1年的时间了,第一个Blog就是“MengYan @ SUN”。SUN的Blog基于Roller,有很多漂亮的模板支持。上周偶尔选了一个“Metal”的模板,觉着很漂亮,于是把它修改了一下,用在我的MT的Blog上,感觉不错。本着创作共用的原则,放个下载包在这里。:-)。
别忘了,这个模板的原始作者是Bryan Bell :P.
Popularity: 33%

Popularity: 33%


Creative Commons License
This work is licensed under a Creative Commons License.

没有什么能够阻挡,你对未来的向往