文章标签 » plugin

wordpress的插件机制用于产品js代码的解耦

由于半路出家,设计模式几乎没有接触,一直为产品代码的耦合头疼,前两天忽然想到,wordpress区区数行代码便实现了强大的插件接口,何不借鉴一下呢,于是便有了下面的假想代码(不了解wordpress插件机制的同学可以先了解一下):

/*
* 以一个相册浏览的产品为例
* 该应用可以实现无刷新的图片浏览,附加功能:新用户引导,图片评论,对图片处理的第三方应用,圈人
*/
//产品引导开始
addAction('photo_browser_init',function()
{
     guideManager.init();
});
addAction('photo_load_sucess',function(photo)
{
    guideManager.step(3, photo);
});
addAction('photo_change',function(photo)
{
    guideManager.step(4);
});
//产品引导结束
 
//管理员ui开始
addAction('photo_browser_init',function()
{
    if ( !currentUser.isAdmin ) return;
    ......
});
//管理员ui结束
 
//相册圈人开始
addAction('photo_browser_init', function()
{
    photo_tag.init();
});
addAction('photo_load|photo_change', function(photo)
{
    photo_tag.update(photo);
});
//相册圈人结束
 
//相片app
addAction('photo_browser_init',function(photo)
{
    photo_apps.init(photo);
});
addAction('photo_load|photo_change',function(photo)
{
    photo_apps.update(photo);
});
//相片app结束
 
//相片评论开始
addAction('photo_browser_init',function(photo)
{
    photo_comment.init(photo);
});
addAction('photo_load|photo_change',function(photo)
{
    photo_comment.update(photo);
});
//相片评论结束
 
//相片浏览核心功能开始
var photo_browser = {...};
photo_browser.init();
//相片浏览核心功能结束

其实跟自定义事件有点类似,但是比自定义事件更强大:

  • 自定义依赖于对象,对脚本的加载顺序会有要求,而wordpress里的addFilter和addAction可以完美解决这个缺点。
  • filter可以实现数据过滤,而自定义事件不能

经过解耦之后的产品更方便多人协作开发,代码块清晰,有效避免svn冲突,还有种种其他好处。。

仅仅是个想法,未经实践,实践ing~

DNS Flusher 2.0.3 在ubuntu下不能用了

升级了一下版本,竟然不能用了,查了一下,原来是文件名大小写的问题…
插件目录的chrome.manifest

overlay	chrome://browser/content/browser.xul		chrome://dnsFlusher/content/dnsFlusher.xul
 
#这里应当改成
#overlay	chrome://browser/content/browser.xul		chrome://dnsFlusher/content/dnsflusher.xul
 
overlay	chrome://navigator/content/navigator.xul	chrome://dnsFlusher/content/dnsFlusher.xul
 
#应当改成
#overlay	chrome://navigator/content/navigator.xul	chrome://dnsFlusher/content/dnsflusher.xul
 
content	dnsFlusher									chrome/content/dnsFlusher/
 
skin	dnsFlusher		classic/1.0					chrome/skin/classic/dnsFlusher/

修改之后重启firefox就可以了
作者肯定是用win系统,文件名不区分大小写,所以不会有问题,其他linux,mac就会找不到文件了..

wordpress plugin:搜索引擎关键词高亮

下载地址更新 2009.11.8
http://wordpress.org/extend/plugins/keywords-highlight-tool/
———-
由于blog的访客多来自搜索引擎,所以关键词高亮会大大的增强访客的浏览体验,帮助访客快速定位感兴趣的内容.

类似插件已有很多,但俺绝不是再造普通的轮子,一定要用浏览器兼容性最好的插件,没有就自己搞..

现存插件的实现方式有两种,一种用php在后端实现,另一种用js在前端实现.

php实现高亮,浏览器兼容性最好,但是有两个问题:

1.效率问题,不如用js实现,将压力分到前端; 2.不支持cache类插件,当然这个问题可以通过hack cache插件解决,但是不可取.

js实现高亮:

比较理想的实现方法,搜到一篇文章叫也谈Wordpress关键词高亮 里面讲到用js高亮关键词,但是中文gb转码使用了vbscript,所以仅支持ie浏览器

于是用自己的想法简单实现了一下这个功能, 点击搜索测试 第一个结果就应该是了

screenshot:

2009-7-21-21-48-56

跟上面提到插件的主要不同点:

  • 改进了高亮的实现方法,仅替换元素的text节点,防止造成元素事件失效
  • 判断如果不是外链过来的访客将不加载高亮的js脚本
  • 百度链接过来,中文gb转码时使用php后台转码,兼容所有主流浏览器

目前仅添加了对google,yahoo,baidu三个搜索引擎的支持,如果想支持更多,自行修改highlight.js即可

插件下载点这里

偶的又一wp插件:超级表情

10.16 2011更新,兼容至wordpress 3.2.1,修正标签不能切换

下载x-emotions_0_1_4
————————–
8.29 2009
更新一下,没想到还有同学在下载这个东西哈哈~
最近加了一套柏夫表情,发现图片大小不一样会有错位的问题,修正一下
效果就看我现在用的就好了~

下载:x-emotions_0_1_3

————————–

回复andy同学:如何自定义框的高度

请下载下面的样式文件

style.css

用记事本打开此文件

#xemotion_dialog_wraper{
	width:100%;
	height:400px;/*把这个高度改成想要的高度*/
	position:absolute;
	text-align:left;
}

然后传到插件的img目录覆盖原文件即可
—————————————–

原来俺的emotion 一直都是拼错的,少了个c
————>emoticons
——————————————

有同学反映评论页没有生效,请确定一下评论框textarea元素的id是否为’comment’,是否安装了其他评论编辑插件

——————————————

更新到0.1.2

修正Maria同学提交的bug

  • 为什么除了第一次,以后再用表情的分类都是乱码?

页面里没有指明编码方式,修正了~

下载:x-emotions_0_1_2

—————————————-

更新一下:修正了 伊迭 同学反映的两个bug\

  • 出现Fatal error: require_once() [function.require]: Failed opening required ‘../../../wp-load.php’ (include_path=’.:/usr/local/php5/lib/php’) in ……dialog_for_comment.php on line 69
  • 在你这显示正常,在我那就掉位了…显示不全
    几个浏览器都试遍了,就Opera好点….

0.1.1版本:x-emotions_0_1_1

———————————————–

周末很无聊,写日志很无聊,额,于是写了一个插件:x-emotions

,啊哈哈哈哈,想贴就贴~

下载: x-emotions_0_1

此插件最大的优点就是:可以添加多套表情,只要在表情目录新建一文件夹把新表情传到目录即可

安装时注意:里面的emotions文件夹的权限最好为777,cache文件要写到此目录

使用说明:

添加新表情:在插件的emotions目录新建一个目录(英文)然后把表情图片传到此目录,如果需要给此套新表情起个名字,则把名字写到一个utf-8编码的名为name.txt的文本文件里,并把此文件传到对应的表情目录.

注意:添加新表情之后必须删除emotions目录下的名字为’cache_for_editor.php’和’cache_for_comment.php’两个缓存文件,重建缓存之后才能看到新传的表情

自定义变量:

x-emotions.php 里的

$blue_emotions_enable_in_comments = true

//是否在留言启用此插件,默认为true,启用

screenshot

-------------------------

在编辑器使用

在编辑器使用时的对话框

在留言使用

在留言使用时的界面