由于半路出家,设计模式几乎没有接触,一直为产品代码的耦合头疼,前两天忽然想到,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();
//相片浏览核心功能结束 Copy Code
其实跟自定义事件有点类似,但是比自定义事件更强大:
- 自定义依赖于对象,对脚本的加载顺序会有要求,而wordpress里的addFilter和addAction可以完美解决这个缺点。
- filter可以实现数据过滤,而自定义事件不能
经过解耦之后的产品更方便多人协作开发,代码块清晰,有效避免svn冲突,还有种种其他好处。。
仅仅是个想法,未经实践,实践ing~
升级了一下版本,竟然不能用了,查了一下,原来是文件名大小写的问题…
插件目录的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/
Copy Code
修改之后重启firefox就可以了
作者肯定是用win系统,文件名不区分大小写,所以不会有问题,其他linux,mac就会找不到文件了..
上次发过一个增强版本,但是使用的复制脚本在flash升级到10版之后就失效了.
这次同样也是修改的0.9版的wp-syntax,跟上一个修改版本不同的就是
- 删除了存在漏洞的test目录
- 使用wp内置函数判断是否输出工具栏,使用url rewrite不会出问题
- 代码复制使用ZeroClipboard,可以兼容所有主流浏览器
效果:
使用方法跟上一个版本一样
<pre lang=”javascript” line=”1″ run=”1″>
把第三个参数设为1即可显示run Code的按钮.
下载点这里:wp-syntax-plus.zip
留言里有个叫whisperer 的同学问我用的啥插件,俺才想起来发一下,一大早起来发我也真不容易
下载地址更新 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:

跟上面提到插件的主要不同点:
- 改进了高亮的实现方法,仅替换元素的text节点,防止造成元素事件失效
- 判断如果不是外链过来的访客将不加载高亮的js脚本
- 百度链接过来,中文gb转码时使用php后台转码,兼容所有主流浏览器
目前仅添加了对google,yahoo,baidu三个搜索引擎的支持,如果想支持更多,自行修改highlight.js即可
插件下载点这里
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;
} Copy Code
然后传到插件的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
-------------------------
在编辑器使用

在编辑器使用时的对话框

在留言使用

在留言使用时的界面
