[ Content | Sidebar ]

Posts tagged wordpress

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();
//相片浏览核心功能结束
Copy Code 

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

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

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

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

WP-Syntax + ZeroClipboard增强版

上次发过一个增强版本,但是使用的复制脚本在flash升级到10版之后就失效了.

这次同样也是修改的0.9版的wp-syntax,跟上一个修改版本不同的就是

  • 删除了存在漏洞的test目录
  • 使用wp内置函数判断是否输出工具栏,使用url rewrite不会出问题
  • 代码复制使用ZeroClipboard,可以兼容所有主流浏览器

效果:

<html>
<script>
alert('ooxx~');
</script>
</html>
Copy Code | Run Code

使用方法跟上一个版本一样

<pre lang=”javascript” line=”1″ run=”1″>

把第三个参数设为1即可显示run Code的按钮.

下载点这里:wp-syntax-plus.zip

留言里有个叫whisperer 的同学问我用的啥插件,俺才想起来发一下,一大早起来发我也真不容易

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即可

插件下载点这里

Gmail to wordpress:通过mail更新wordpress

个人比较习惯用email更新博客,写日记用的blogger一直是手机写邮件更新,于是打算这个工作blog也要这么搞

wordpress自身有个通过邮件更新的功能,但是很弱,不支持附件.所以俺再次拿python做练习

实现方式:

发布blog时只要写信给somebody+xxoo@gmail.com

脚本会定时检查somebody@gmail邮箱,

取出收信人是somebody+xxoo@gmail.com的未读邮件(加xxoo为了防止垃圾邮件),然后将邮件正文中引用的图片取出,上传到blog或着picasa,将返回的地址作为图片的新地址,然后通过wordpress的metaWeblog api 发布到wordpress

实现特性:

  • 可以通过添加"[[tag:t1,t2,t3]]"设定文章的标签
  • 可以通过添加"[[cat:c1,c2]]"设定文章分类
  • 可以添加"[[end]]"标记文章结尾,标记后面的字符将被忽略
  • 可以添加[[html]][[/html]]块发布纯html代码块
  • 可以将邮件中的图片提取,并上传到picasa或者wp
(备注:"[["实际使用用时要用三个,即"[[[xxxx]]]"这里用两个是因为本文也是通过这个脚本发布的)

运行环境:
python2.6(ubuntu)(其他版本未测),gdata库

部分代码:

def after_publish( self, mid ):
 
        self.mail.read( mid )
 
 
#实例化一个Gmail2Blog,参数依次为:gmail帐号,gmail密码,wp帐号,wp密码,blog的xmlrpc地址
myG2B = Gmail2Blog( 'somebody@gmail.com', 'xxxx', 'admin', 'xxxx', 'http://xxoo.com/xmlrpc.php' )
 
 
 
#将处理完的邮件标记为已读
myG2B.publish_callback = after_publish
 
#设置图片的上传方式,'picasa':上传到账户的picasa相册,'wp':上传到blog
myG2B.upload2 = 'picasa'
    
while True:
    #将收件箱中发送给'somebody+blog@gmail.com'的未读邮件发送到blog
 
 
    myG2B.publish_mail( 'INBOX' , '(UNSEEN) (TO \"somebody+blog@gmail.com\")' )
    #每隔十分钟检查一次
    time.sleep( 60 * 10 )
Copy Code 

源码下载:
非常不靠谱版本(等靠谱了就放到vps上长期运行)

gmail2blog-sbeta.tar.gz

Gmail撰写截图:

screenshot_016.png

偶的又一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;
}
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

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

在编辑器使用

在编辑器使用时的对话框

在留言使用

在留言使用时的界面