北京时间2007年2月21日凌晨3点57分,WordPress 2.0.9及WordPress 2.1.1发布。
这次WordPress 2.0.9的更新只有两处:
- 用wp_specialchars()函数处理WordPress确认对话框的内容。这就是WordPress官方Blog所说的防范XSS跨站脚本攻击的地方。[4877]
- 在TinyMCE文件和TinyMCE帮助文件里输出正确的文件的编码方式。[4888]
两处小更新,没啥大变化。况且,现在很多人都转用WordPress 2.1了,而各大插件和模板也都陆续开始只兼容WordPress 2.1了。唉,2.0.9这么快发布,WordPress 2.0.10真的要来了。
WordPress2.1.1更新比较大。从2007年1月23日WordPress 2.1发布以来,这一个月的时间,WordPress开发组在忙于WordPress 2.2的同时也对WordPress 2.1做了许多改进。
-
wp_list_bookmarks()函数里,当$title_li参数为空时,不输出
<ul>标签。[4800] -
一些日期格式现在可以被翻译了。包括页面管理页中页面最后更新日期、文章管理页中文章的发布日期、单篇文章的评论管理页(http://abc.com/wp-admin/edit.php?p=1&c=1)中评论的发布时间,以及常规选项页里UTC日期的格式。[4802]
/wp-admin/edit.php文件里180行那儿,ryan只写了一个下划线。ryan犯这样的错误不是第一次了,而且这个错误从1月25日直到今天2.1.1发布了也没人发现,哈哈。 - 修正导致Ecto工具在刷新文章时由于把分类ID设置为整型而导致的错误。[4807]
- 读取模板文件的模板名称(Template Name)的时候,因为正则表达式多加了一个空格而导致出错。[4810]
比如使用K2模板时,page-archives.php文件里写的是:"Template Name: Archives (Do Not Use Manually)",而最终匹配出来并显示的模板编辑器页面右侧的是" Archives (Do Not Use",都是因为那个空格的存在。 - 修正wp_create_file_in_uploads过滤器的参数错误。[4819]
- 修正匹配more标签的正则表达式。[4822]
WordPress 2.1里加入的这个好玩的功能,你可以用<!--more 阅读更多内容吧-->这样的more标签来自定义“阅读更多”链接的文字。我觉得这个功能还是有bug,当more标签后面还有其他的html注释的时候,比如分页标签,正则的匹配还是有问题。<!--more-->hoho,<!--haha-->这样的代码会让“阅读更多”链接的文字变成“-->hoho,”。 - 添加遗漏的wp-scriptaculous.js文件。[4823]
- 修正
read_private_pages权限检测错误的问题。[4825] - 在TinyMCE文件和TinyMCE帮助文件里输出正确的文件的编码方式。同WordPress 2.0.9的更新内容。[4846]
我在Firefox里没遇到过TinyMCE帮助文件有乱码的情况,不知道IE里如果。可能使用非UTF-8编码的Blog会受此bug影响吧。 - get_categories过滤器没有作用于从cache中读取的分类信息。[4849]
- 在wp_cron()函数里检测当前请求是否为“Blog地址/wp-cron.php”。[4850]
该bug在某种特殊情况下会造成很大的流量。 - 确保存入cache里的没有引用。#3726 [4857]
这一条很晕,Mark说,"In any case, I discovered the issue. get_category() tries to store an array of object references into the cache. The cache doesn't like this, and stores a blank string instead. So you get a blank string on the way out. Looking around the web, it seems like good old serialize/unserialize is the sure way to make sure you don't have any references.
Object reference,对象引用。在Coolcode那儿找到对象引用和指针引用的资料,以及,“PHP在序列化时不记录数组中的对象引用。”所以,serialize后再unserialize一个数组就可以去除其中的对象引用了,哈哈。 - 只在page页检查page ID。[4864]
没太看懂,不过2.0.4时期报的bug现在才有人管,看来开发组的大大们可能也没看懂。 - 在
/wp-admin/index-extra.php文件里输出HTTP头标识页面的编码方式。[4871] - 始终使用HTTP协议而非HTTPS协议访问TinyMCE的CSS文件。(Link to TinyMCE css file
with http scheme on all server setups.)#3646 [4872]
把if ( $_SERVER['HTTPS'] )改成了if ( $_SERVER['HTTPS'] == 'on' )。说是很多人升级到WordPress 2.1时发现文章编辑框里的文字变得很小,而这个问题有些服务器上有出现,有些没有。这条更新解决了这个问题。看了下,我的服务器上没这个问题。怪不得WordPress 2.1刚发布时很多人抱怨编辑框里的文字太小,然后到处问WordPress 2.1降级到2.0.7的方法。 - 用wp_specialchars()函数处理WordPress确认对话框的内容。同WordPress 2.0.9的更新内容。[4876]
- 修正使用Autosave功能创建的无标题草稿的日期标题被添加了两个时差的问题。[4883]
- 修正fix_attachment_link()函数中的正则表达式错误。[4889]
- WordPress不再在文章的div标签里添加p标签。[4894]
更新多多,WordPress 2.1的使用者们应该抓紧升级了。WordPress官方Blog列出了WordPress
2.1升级到WordPress
2.1.1更新文件列表,照抄过来,按照字母顺序重新排了下序,又校对了一下,21个文件被修改,还有新增了一个wp-includes/js/scriptaculous/wp-scriptaculous.js文件,没错。
- wp-admin/admin-ajax.php
- wp-admin/admin-functions.php
- wp-admin/custom-header.php
- wp-admin/edit.php
- wp-admin/index-extra.php
- wp-admin/options-general.php
- wp-admin/options-reading.php
- wp-includes/js/scriptaculous/wp-scriptaculous.js
- wp-includes/js/tinymce/tiny_mce_config.php
- wp-includes/js/tinymce/tiny_mce_gzip.php
- wp-includes/js/tinymce/wp-mce-help.php
- wp-includes/bookmark-template.php
- wp-includes/cache.php
- wp-includes/capabilities.php
- wp-includes/category.php
- wp-includes/cron.php
- wp-includes/formatting.php
- wp-includes/functions.php
- wp-includes/post.php
- wp-includes/post-template.php
- wp-includes/version.php
- xmlrpc.php
WordPress 2.1.1,大餐不容错过。等到4月底又有WordPress 2.2用了,哈哈,2.2很强的说。
今天是2007年2月14日,情人节。
说好这次情人节要去逛花市。广东的花市传统挺好玩的,按照传统是除夕夜全家一起逛花市,不过记得以前除夕夜花市都撤了,谁还在除夕晚上出去啊。
每年情人节都要消费掉大量的玫瑰花,听说美国情人节期间一支玫瑰花要三四十美元,好贵啊。今年送LP几张捶背券。2月初就找人设计了,自己又做了几张,打印出来,签字生效,嘿嘿。
最后一张是找人帮忙设计的,背景不错,就是小人丑了点。
画的不怎么好看,我也不会用Photoshop,以后要抽时间好好学习,争取下一次设计几张好看点的捶背券。
如果你不知道“捶背券”是什么东西,如果你不知道捶背券为什么要有有效日期,说明你没看过《蜡笔小新》,嘿嘿。
今年一月份看了这篇《斜立着的可乐罐》,觉得很好玩。当时就想自己试着做一下,于是买了罐可乐回家,喝光里面的可乐,然后装进一些水,稍稍花了点时间就立起来了。
那个可乐罐一直立在我家的墙角,立了一个月(虽然中途被我踢倒过几次,但都被我及时又立了起来),直到昨天LP说里面该长霉了就扔了。不过2月9号那天去一个朋友家,立起了一个可乐罐,然后拿她的相机拍了下来,如图所示:


好好玩,拿这招逗小朋友玩应该不错,嘿嘿。呃,泡MM就不一定行了,反正我LP看到我立起来以后上去就给摁倒了...或许,人类的内心中都有搞破坏的欲望。
立起可乐罐,不需要多高深的技巧。罐里放一些水,或者留一些可乐,既不能让水面超过底部的高度,也不能让水太少,压不住右边罐体的重量。老是放不稳的时候,不妨把水放多点,水面接近底部的最高点时最好立,少了的话就有点难,要屏住呼吸,保持罐体的平衡,等罐子里的水不再晃动的时候就立好了。
以前总是爱喝可口可乐,觉得百事可乐的味道不正,现在反过来了,总是喝百事可乐。不知道为啥,难道是因为便宜两毛钱?汗。
WordPress 2.0.8
与于北京时间2007年2月6日6点43分正式发布。
WordPress 2.0.8和WordPress 2.0.7相比修改不大,主要有以下几点:
- 在设置->永久链接页面里,当更新永久链接结构时WordPress如果检测到.htaccess文件无法写入的时候会给出要写入.htaccess文件的内容,要求用户自行将这段代码写入.htaccess文件中。这段内容以前没有做html实体化处理,现在使用wp_specialchars()函数处理以便这段内容能正确显示出来。#3523, [4789]
- 建立查询字符串的时候,对每一项进行检测,如果不是scalar的话就跳过。所谓scalar,PHP文档的is_scalar()部分翻译成标量,指整型、浮点型、布尔型、字符串等普通类型,而非数组、对象等复杂类型。这或许可以防止一些攻击。[4826]
- 在WordPress打开远程文件时的加强安全检测。[4827]
- 在永久链接结构中包含目录名的时候,比如"/%category%/%year%/%postname%/",直接访问"http://abc.com/wp-rss2.php"这样的地址得不到正确的feed内容。不过好像很少有人用这样的feed地址吧。#3214, [4839]
- cache模块和数据库模块增加对PHP 5.2的支持。[4841]
- 还有其他一些typo error(拼写错误)。
- Akismet更新到2.0版。
更新不大,没什么要紧的漏洞,除了第二条和第三条。i18n部分没更新,所以中文包也不需要更新。我直接上传/wp-includes/version.php完事,反正也快要升级WordPress 2.1了。
这次发布静悄悄的,也没在官方Blog上写个发布说明。唉,WordPress 2.0.x的时代真的已经结束了,WordPress 2.1.x的时代已经来临了。我也应该考虑升级到WordPress 2.1了。WordPress 2.0.x还要维护到2010年,但是随着大家开始转用WordPress 2.1,插件和模板的开发者们也会转向2.1平台的。如果失去了各种插件的支持,谁还会用2.0.x系列呢。
Update:汗,忘了补上WordPress 2.0.8的下载地址了。WordPress的各个release版本都可以在http://wordpress.org/download/release-archive/下载到。而且最好下载tar.gz文件的,因为网站上给出的MD5码是tar.gz文件的。而且,Windows下WinRAR打开tar.gz文件并没有什么问题,Linux/UNIX下就不用说了。
做了几天,前后耗时12个多小时,终于把WordPress 2.1的中文包做好了。
1月28日做好的WordPress 2.0.7中文包2.0版,在此基础上做WordPress 2.1的中文包。因为WordPress 2.1相对2.0系列的改动非常大,更新翻译字符串后,总共有346条待翻译的。于是,一条一条地查源文件查后台对应位置进行翻译。其间还有一些功能我不太了解具体的作用,在源代码里翻了一下实现该功能的代码,也耗了一点时间。
WordPress 2.1里已经把WordPress Database Backup插件移出核心了,而WordPress Database Backup插件已经换了开发者,并推出了兼容WordPress 2.1的 2.0版。这个2.0版里修复了以前的一些bug,并增加了对WordPress 2.1的定时功能的支持,但是所有的翻译还是用的直接调用WordPress语言包的方法,没有使用自己的语言包。所以,这次翻译WordPress 2.1时我还是把它包含了进来,使用WordPress 2.1的人只要装上这个插件激活就立即是中文的了,就像以前内置的插件一样。
TinyMCE此次更新巨大,花了一个下午的时间从TinyMCE的各个en.js文件里把要翻译的字符串提取出来,做成po文件。最后弄出了150多项,经过内部查重,再经过对比WordPress中文包查重,最终去掉了所有重复项,只剩133项。TinyMCE的大升级,对应的要翻译的字符串也从42项猛增到133项,确实是个好消息。在编辑文章时按下 Alt+v快捷键即可看到更多的工具栏按钮,使用的过程中就会在按钮的提示以及弹出的对话框中看到翻译后的中文了。
在弄好TinyMCE的翻译并合并到WordPress中文包之后,我就上传了mo文件到Blog里做测试。不过很遗憾的发现,有几处工具栏按钮的提示没有正确的显示中文。在WordPress
2.1的源代码里查了一番,又到WordPress网站上查源代码的修改记录,最终查到在[3664]里,进行TinyMCE翻译处理的代码里的正则表达式由
$search2 = "/ :
(['\"])(.*)\\1/Uem";替换成$search2 =
"/\\s:\\s(['\"])(.*)\\1(,|\\s*})/Uem";。于是,原本能翻译的一些地方现在没法翻译了。唉,郁闷的很,辛辛苦苦弄的TinyMCE的翻译,到头来却因为WordPress
2.1的bug而无法完整地翻译整个编辑器的字符串。报了bug #3733,等修复吧。
这次翻译的过程中,多亏了Edward和cqcrz的鞭策,而且翻译完以后他们也帮忙做了测试并提出了很多意见,真是要谢谢他们。
最近在WordPress中文论坛看到有个叫陈少钧的人做了个WordPress 2.1中文包[ via],并在他的中文包页面上写上“我们需要结束 WordPress 混乱滞后的中文翻译。把 WordPress 本土化标准和统一,受益的是全体使用 WordPress 的用户。有兴趣推动此标准化的朋友请发邮件给我:paveochen(at)gmail.com 。”(好像现在这句话已经被删了)呃,WordPress的中文翻译,“混乱”倒谈不上,目前也没几个人在做这个事。“滞后”嘛,我倒没觉得点点游和我的中文包翻译的有多烂。“标准”嘛,也许弄了工作组,把大家都拉进来,统一制作WordPress中文包也不错。不过,现在这种局面倒也没什么不好。好几个人在做WordPress中文包,大家愿意用哪个就用哪个。百花齐放也未必是件坏事。
这个中文包我下下来看过,并不是很好。我做了WordPress中文包,里面一千三百多项字符串,每一项我都是认真找出在源代码中的地址仔细的查看过,所以对每一项字符串我都清楚的很。陈少钧的整个中文包我大致翻了一下,很多地方都和我和点点游的中文包没什么不同,有些地方还自作聪明的按照英文原文做翻译,却没有参考源代码。比如,我的中文包对存档日期格式的翻译是“%2$d年%1$05s”,而对月份的翻译是“1月”、“2月”...“12月”。"%1$05s"里,5的意思是要显示5个字节,0的意思是不足的以数字0做补充。因为UTF-8里汉字都是3个字节的,所以最终显示效果就是“01月”、“02月”...“12月”。这样把格式写进翻译字符串而不是直接把“01月”写进月份的翻译也是为了不影响其他地方的日期格式。不过,陈少钧的中文包里照抄了我对存档日期格式的翻译,却把月份的翻译改为了“一月”、“二月”...“十二月”,这样就不对应了。
最近nbachiyski提了个建议#3687,建议给要翻译的文字加上注释,以方便翻译者。我觉得这没这个必要。WordPress使用了gettext,翻译者使用poEdit软件即可从WordPress源代码里得到所有要翻译的英文字符串。但是,翻译的时候并不能只看这些英文字符串做翻译,而是要参考每个字符串在源代码里的上下文。同时,翻译者要对WordPress有足够的了解,起码对后台各个选项的作用要清楚。只有这样,翻译出来的效果才会比较好。或许,陈少钧同学应该先把自己的中文包做好,再来扯标准这面大旗。当然,我也知道,“三流企业做产品,二流企业做品牌,一流企业做标准”,扯上标准这面大旗对自己是很有利的。而且,使用者如果看到“WordPress标准中文包”或者“WordPress官方中文包”的字样,也会有所倾心的。只是,在做标准之前,先把你的产品做好撒。
点点游做的WordPress中文版很不错,很多地方都做了很深入的汉化,比如WordPress自带的两个模板,以及很多WordPress没提供汉化的日期等部分。据点点游大大本人所说,他曾经做过很多大型程序的汉化工作。怪不得做WP的汉化做的这么专业。
我做的中文包不同于中文版,有很大的局限性,所有WordPress不提供翻译的地方我都翻译不了。我能做的也就是尽量的去报bug,但是也比较麻烦。首先我的英语很蹩脚,要跟WordPress开发组的人解释清楚事情的原委要查好久的金山词霸。另外,WordPress开发组也比较懒,感觉上好像很多bug被报上去后,他们总要说,希望有人做个Patch。或许,有了Patch他们可以很容易的让机器帮他们合并到WordPress源文件里,而不用自己去找那几行代码了。而我又不会做Patch,对svn软件不太熟...
对于中文版,我觉得不应该仅仅是汉化。我以前看过日本的一个WordPress网站,他们做的非常好,整套的日文文档,还有WordPress日文版里,他们也做了很深入的日文化,还加入了一些功能。比如,安装WordPress日文版时,你可以自行选择数据库的编码方式,是Shift-JIS还是UTF-8。所以我觉得中文版应该做的更多些。比如,WordPress里有一些bug,WordPress开发组迟迟不肯修复。(比如数据库编码方式的问题,WordPress开发组决定到2.2版才开始考虑该问题)还有一些不适合中文的地方,比如后台的一些CSS,比如对英文引号的处理,都不符合中国人的习惯。还有,每次WordPress有release版出来时,都会有很多bug被曝出来,Mark经常在他的Blog上对这些bug做出说明并给出临时处理意见。或许中文版可以做出一个小更新来修复这些问题,不必等WordPress原版推出下一个版本,这样对中文WordPress用户也是个好事。
如果有谁真的希望弄个标准化的WordPress中文版来,以上是我的建议。不过,要紧跟WordPress的步伐,随时获得最新的bug报告,对WordPress进行一些修改以适应中文环境,确实是个很累人的事。
而且,如果多人合作,也会遇到一些新问题。我自己做中文包,对于每一项我都很清楚,但是多人合作,我就要写注释,说明这里为什么不能按照原文翻译而要翻译成这样。同时也会面临一些冲突,比如我比较喜欢不翻译很多名词,比如blog、Trackback、Pingback、blogroll、feed、RSS。没必要非把blog翻译成博客,从国外的Windows、Word、Excel、Winamp、WinRAR,到国内的QQ、Foxmail,英文名并没有对它们的流行造成什么阻碍嘛。只有Google,傻乎乎的认为起个中文名字“谷歌”会更本地化一些。
我还发现我是个很呆的人,内向,不善于与人交流。而且,只懂研究技术,不懂做一些宣传。象点点游在WordPress新版发布后会写“WordPress ××版发布,本站在第一时间为您提供中文版。”象我这样木呐的人写不出这种文字,我只会写中文的WordPress changelog,一条一条的列出更新的内容。唉,孤僻的程序员,终日与电脑为伴。
一直没太注意rm文件的弹出窗口广告问题,平常下载的大多是冰鱼和伊甸园的我猜还有韩娱论坛的X-Man,都比较正规一点,不会带弹出窗口广告。偶尔下到一些有广告的电影,窗口一弹出来我就会立刻关上,所以少有中招。
最近偶然发现在使用暴风影音播放rm文件时也会弹出窗口,所以抽了点时间研究了下这个问题。原以为rm文件是通过在文件tag里设置一个属性,如果播放的rm文件的该属性值被设置成一个URL地址就在浏览器里打开这个URL。研究后我才发现,比我想象的要复杂点,rm文件可以内嵌一些很简单的小脚本,RealPlayer播放器读取rm文件时会执行这些脚本,从而在播放到某个时间时打开一个URL。
RealProducer Plus和Helix Producer
Plus都自带一个rmevents.exe程序,可以修改rm文件的event部分。rm文件的event部分是纯文本的,只要按照固定的格式写好,RealPlayer播放器在播放的时候就会照着执行了。具体的event格式在Real网站的
Helix Producer教程里有详细说明,只要用u 00:01:00.0 00:01:00.0
http://www.example.com/这样的代码就可以让这个rm文件在播放到1分钟时自动打开后面的URL。按照event的格式一条一行地写入一个文本文件内,然后用
rmevents -i film.rm -e test.txt -o
film2.rm命令即可把这些event信息加入rm文件,一个内嵌弹出窗口广告的rm文件就此诞生。如果浏览者的IE浏览器安全性不高,而rm文件内嵌的URL里又有病毒的话,很容易就可以让浏览者中招。
而清除弹出窗口广告的方法,和加入的方法一样,只有建一个空的event文件,然后写入rm文件就可以了。目前网络上好像有很多这样的程序,全部都是软件自带了rmevents.exe程序和它需要的/tools/rmto3260.dll文件,然后做一个GUI界面,让用户选择文件后调用rmevents程序将空的event文件合并到rm文件中。最近常看到一些电影在播放时显示出来的信息带有"RM去广告专家"字样,估计是一些人在下载了电影后用了这样的软件去处理过。下了个RM去广告专家 v2.10批量处理版,在安装目录里找到blank.txt文件,文件里放着如下代码。这样处理后的rm文件弹出窗口广告是没了,可是多了去广告软件的信息,够无耻。i命令是设置标题,a是作者名,c是copyright。a和c命令没有在Real网站的教程里提及,只有u和i被提及过,这个软件作者也算够强的。
i 00:00:00.0 00:00:10.0 RM去广告专家
a 00:00:00.0 00:00:10.0 www.591dir.com
c 00:00:00.0 00:00:10.0 用《RM去广告专家》清除RM恶意弹出广告
另外还有从RealPlayer播放软件入手的方法,只要删除RealPlayer目录下的/rpplugins/rpwe3260.dll文件,就可以把整个RealPlayer软件的浏览器部分禁用了,这样也不会再弹出窗口了。另外,在这里看到,有人写了一个小软件rpnopop,只要执行软件,点击“屏蔽弹窗”按钮,软件就会修改注册表,使得RealPlayer不再执行event脚本。不过作者说了,这个方法只在安装了RealPlayer软件的环境下有效,只安装了Real解码器的环境下依然无效。唉,Real公司咋就不紧张这个问题捏?
rmevents.exe程序有一个"-d"选项,可以把rm文件中的event给dump出来。这个命令可以用来分析rm文件的event代码,做成程序放到rm文件的右键菜单里最好了。
Update:昨天刚写了这篇文章,今天就中招了。已经用了rpnopop修改了注册表,但是对网页中的rm文件播放弹出的窗口无效。无奈啊,还是Firefox安全些。
Update2:关于暴风影音里rm弹出广告的问题,我昨晚又做了下测试。其实也不只针对暴风影音,因为所有的MPC播放器应该都是一样的。
在暴风影音里,如果设置rm文件的播放方式为DirectShow,则不会弹出窗口;如果设置为RealMedia,则依然会弹出窗口。而且,和RealPlayer稍有不同的是,如果脚本代码设置的是在RealPlayer自带的浏览器里打开URL,那么在RealPlayer播放会在自带的浏览器里打开,但是MyMPC里会调用IE浏览器打开。记忆中,这些年,大多数rm文件都可以正常在DirectShow方式下播放,只是偶尔有一些rm文件必须切换到RealMedia方式才能正常播放。(关于DirectShow和RealMedia两种方式,可以参考风雷影音中的RealMedia专题。)所以平常还是把暴风影音切换到DirectShow方式,如果遇到一些不规范的rm文件再使用rpnopop软件配合RealPlayer播放器或者使用rmevents程序吧。

另外我发现,网页中播放的rm文件好像也不受限制,所以还是不要在网页里看视频的好。Real公司还真麻烦...
2006年7月13日,想弄一个类似Wikipedia上文章目录的功能,希望能参考Wikipedia的格式,只要用"==title=="这样就可以自动生成标题,并在文章的开头根据这些标题自动生成目录。写了一点代码,但是没有完成,能力有限啊。2007年1月10日,也就是半个月前,在鼓捣我的Projects页面的时候,偶然发现了Table
of Contents Generator
插件,可以为文章自动生成一个目录,方便浏览者查阅。这个功能不错,有点类似Word的目录域功能,可以自动生成文章目录而不用作者操心。
看了一下这个插件的源代码,不是很满意,就重新写了一个,用于我的Projects页面。Scott Yang用的堆栈,我觉得不太好,就用了一个数组模拟堆栈,写出来的代码也短一些。Scott还考虑了对分页文章的处理,我没写过分页文章,所以不予考虑。再在大的函数开头建几个类变量的引用,这样整个程序小了很多。
给TOC上面加了一个标题,这样就和Wikipedia里的目录很象了。Wikipedia里的文章目录标题旁边有一个链接,点击它可以隐藏或显示目录内容。我懒得弄那个链接了,直接通过JavaScript代码控制当点击标题时隐藏或显示下面的TOC框。另外还参考了WordPress Codex里 这个页面的TOC部分。JavaScript代码很简单,但有一个问题是当隐藏TOC内容后,整个TOC块的会突然变窄。Wikipedia里没对这个情况进行处理,点隐藏就突然变窄,点显示又突然变宽。而WordPress Codex里则使用固定宽度的TOC框。查了一些CSS方面的资料,使用JavaScript在隐藏的时候把TOC框的clientWidth值赋给toctitle.style.width。这样在Firefox下没有问题,IE里却不可以。用JavaScript的alert()函数查看TOC框的clientWidth值,发现是0。在网上逛了很久,都说没有办法。最终,只有用offsetWidth这个属性。offsetWidth和clientWidth的区别是,前者包括border的宽度,而后者不包括。最终写出了比较完美的代码,在IE6 SP2、Firefox 1.5.0.6、Opera 9.10下均测试通过。
前几天忙于WordPress 2.0.7和WordPress 2.1,今天抽了点时间又看了下这个插件。插件在文章页面显示没有问题,但是在feed里出了问题。找了很久,才发现类的对象只建立一次,它是被重复使用的。把初始化变量移到函数里,问题就解决了,可以release了。
请到Yskin's Table of Contents Generator主页下载并查看更多信息。
天佑一直使用着WordPress 2.1版本,从老早以前的Alpha版本就一直跟着svn走了。他对WordPress 2.1版本了解的比较多一些,也写了一些文章讲了一些WordPress 2.1的问题。
WordPress 2.1有一个feed的问题,在天佑的 这篇文章里有详细描述,并向WordPress开发组报了bug #2582。这个问题会影响同时使用全文feed和more标签的用户。当你在文章里使用的more标签时,Blog首页里这篇文章的显示将会在more标签这儿截断,并在后面显示"read more"字样,指向文章页面。从WordPress 2.0系列以前,WordPress对more标签的处理一直是只影响Blog首页,不影响archive页,也不影响feed里的全文输出。但是,WordPress 2.1里却改了,feed里一样会在more标签这儿截断。
我想没人会喜欢这个修改。既然选了feed全文输出,就希望feed里是完整的全文。more标签只是用于维护Blog首页的干净整洁,同时影响feed可不好。随着WordPress 2.1的正式发布,我想会有很多人关注到这个问题。冤有头,债有主,虽然是2006年3月的事了,我还是要查一下这个bug到底是怎么来的。
按照天佑报的bug里的说法,他是在3645版本里发现有这个bug的。我往前找了一下,找到Changeset
3638。很明显,这个bug出现的原因是因为WordPress把wp-rss2.php等文件的载入方式改了。以前是用require()函数载入的,在3638里被改为通过load_template()函数载入。以前WordPress的wp-rdf.php,
wp-rss.php, wp-rss2.php, wp-atom.php文件的开头都有一句$more =
1;,这句代码保证了feed的输出的始终是全文。在[3638]里,载入方式被改变,这些feed文件在一个函数里被载入,导致这里的$more变量由全局变量变成了一个局部变量,于是,bug就产生了。
显然这个修改不是WordPress开发组故意为之,而是无心之过。但是,在天佑报了bug以后,Mark说," This is intended behavior."Mark认为这是故意为之,并且认为这种方式更好一些。这个Ticket还吸引了ryan和matt,他们也认为这样更好,并且认为WP 1.5里就是用这种方式处理的,并且还在[4184]里做了一些优化。但是资深WPer天佑立刻指出,WP 1.5和2.0一样,这个改变发生在WP 2.1 Alpha里。
最终,这个事就被这么确定下来了。WordPress开发组完全无视我们强烈的要求,在WordPress 2.1里对feed的输出方式做出这么重大的改变。随着WordPress 2.1的正式发布,会有越来越多的人发现这个问题,就在昨天还有人在天佑的那个ticket里表示了异议。这种输出方式的重大改变,如果确实这种功能的话,也该给一个选项啊,这样强行的改变,不顾广大用户的感受,只凭自己的喜好,出了问题后还狡辩说是故意为之,一个字:可耻!
可笑的是,4个feed文件中的$more = 1;代码依然被保留了下来,还在WordPress
2.1的源代码里静静的躺着。好好的躺着吧,最好一直躺到WordPress 2.2里。
解决的方法嘛,除了按照
天佑所说,修改/wp-includes/query.php文件之外,还可以直接修改那4个feed文件,把$more
= 1;修改为global $more; $more =
1;,或者$GLOBALS['more'] = 1;。
最后,作为一个懒人,未免以后升级WordPress时需要修改4个feed文件这么劳累,做了个小插件,在WordPress源代码里随便找了个地方插进去,对$more变量做了处理。阿土伯说,傻人有傻福。
请到WordPress 2.1 feed Tuneup主页下载并查看更多信息。
点点游WordPress 2.1中文版是点点游大大制作的中文化的WordPress版本。点点游大大一直致力于WordPress本身和WordPress模版的汉化,从很久以前就开始为WordPress的每个发布版本制作中文版了。这个“中文版”不同于“中文包”,中文包只是数据文件,WordPress只是从中文包zh_CN.mo文件里读取翻译后的文字并显示出来,所以,WordPress没有提供给语言包翻译的字符串,以及一些因为在语言包被调用之前显示而无法提供给语言包翻译的字符串(比如一些错误信息),中文包都无能为力。而点点游制作的中文版对这些地方做了细致的汉化,甚至一些注释部分都汉化了。
但是,点点游大大没有给出中文版修改了WordPress原版哪些部分的说明,或许是因为太忙吧。因此,网上流传着很多流言,有的说中文版/中文包“严重影响速度”,有的说中文版下某些插件或模版无法正常工作,换回原版WP就好了。所以,继上次我写了点点游WordPress 2.0.5中文版修改记录,这次再写一下点点游WordPress 2.1中文版的修改记录。
- /wp-admin/admin-functions.php文件中,把用户名称的显示从“名 姓”修改为“姓名”。这样比较符合中国人的习惯,不过修改后的姓名中间没有加空格。
- /wp-admin/edit.php文件中,把文章管理页面中按月浏览的那个月份列表从“May 2006”修改为“2006年5月”
- /wp-admin/edit-comments.php和wp-admin/moderation.php文件中,把评论管理页面中的评论日期格式由"M j, g:i A"修改为“n月j日, g:i A”
- /wp-admin/index.php和/wp-admin/index-extra.php文件中,在后台Dashboard里添加来自"http://www.gtp2p.com/feed/"的新闻。呃,看看新闻也不错哈。Technorati的feed这次没有被移除,因为WP 2.1的异步feed读取已经避免了Dashboard打开慢的问题了。
- /wp-admin/setup-config.php文件做了全面的汉化。这是在上传WordPress文件后,建立wp-config.php文件的程序,对这个文件进行汉化,方便了初次安装WordPress的用户,让他们可以在中文界面下填写数据库用户名密码等信息。
-
/wp-admin/upgrade-functions.php文件里给
__('about')加了一个urlencode函数。 - /wp-admin/wp-admin.css以及TinyMCE的CSS文件中,把字体大小小于12px的全部调成12px,英文里10px的字都还能看,中文里12px已经是能忍耐的最小字号了,再小的化Windows的宋体字体文件里就没有相应的字号,显示出来就会很小又很模糊了。这对于中文用户很有帮助。不过我把我的Firefox中文最小字体设成了12px,要不然,别的不说,Google Calendar里的中文都看不清了。Firefox的这个功能真不错,哈哈。
- 汉化Akismet、Hello Dolly这两个插件的名称和说明部分。
- WordPress Database Backup插件已经在WordPress 2.1里被移出核心了,但是点点游大大为了方便中文用户,将这个插件集成进中文版,并进行了细致的汉化,还把所有的get_settings()换成了get_option(),以兼容WordPress 2.1。不过,集成的是1.7版。我记得WordPress核心里的这个插件老早就改为1.8版了。而且,好多人都说,这个插件的旧版本已经不能在WordPress 2.1里使用了。WordPress Database Backup插件已经换了开发者,并推出了修正了bug并兼容WordPress 2.1的 WordPress Database Backup 2.0。所以,请使用WordPress 2.1的朋友们及时升级到新版本。
- 汉化了内置的WordPress Classic和WordPress Default两个主题。
- 汉化普通编辑器的快捷按钮,通过增加中文js文件汉化TinyMCE编辑器。在TinyMCE中增加分页按钮,修改了可视化编辑器中两个图片文件,把"More"替换成“更多”。
- /wp-includes/general-template.php文件好像有点不对,这好像是个旧版的文件,很多地方和WordPress 2.1正式版对不上号。比如,WordPress 2.1里编辑器中的两个标签名分别是"Visual"和"Code",这两个名称是2006年11月17日被修改为现在的样子的,以前叫"Editor"和"HTML"。[via]而点点游中文版里还是以前的名字,所以,中文版里的这个文件起码是去年11月17日之前的旧文件。
- /wp-includes/gettext.php文件中加入一句
$string = str_replace("\r\n", "\n", $string); // Fix multi-line string problem.。因为点点游中文版把所有文件都由UNIX格式改成了DOS格式,所以要加上这一句来修正bug? - 将GNU许可证文件license.txt替换成中文版。
- 汉化readme.html使用说明文件。
- 将wp-config-sample.php文件中的说明部分全部汉化,并将
define ('WPLANG', '');修改为define ('WPLANG', 'zh_CN'); - 在/wp-includes/languages/目录下增加wordpress.pot,zh_CN.po,zh_CN.mo三个文件,其中zh_CN.mo为中文包。
- /wp-admin/install.php、/wp-includes/wp-db.php、wp-blog-header.php、wp-settings.php文件中错误信息的汉化。
所有修改的内容都在这里。下次再遇到一些插件的问题,模版的问题,以及WordPress本身的问题,就不要再往点点游的中文版上怀疑了。
另外,希望使用点点游WordPress 2.1中文版的用户去升级一下WordPress Database
Backup
插件。还有,最好找来WordPress
2.1原版里的/wp-includes/general-template.php文件上传覆盖一下,差别还是满大的,免得有bug什么的。
我还没有升级到WordPress 2.1,不过我在一个子目录下装了一个WordPress 2.1。这几天只用过几次,发现主Blog这边的WordPress 2.0.7的编辑页面里,右边的那些小框框都不能拖动了,标题栏右边用来展开框框的加减号也不见了。看了下Firefox的JavaScript控制台,发现报了一个错误,好像是cookie有问题。
小小的研究了一下。WordPress会自动记住这些框框的顺序,以及打开或关闭。这些自然不会记录在服务器上,而是用cookie记录的。找到控制这些框框的js文件:/wp-includes/js/dbx.js,发现里面在设置cookie的时候,path被设置为"/"。WordPress的其他cookie,比如记录用户登陆状态的cookie,都是有记录path的,所以多个目录下的不同WordPress互相之间不影响。而这个dbx.js只是个js文件,无法象PHP文件那样使用SITECOOKIEPATH常量获得当前WordPress在域名下的哪一个PATH,所以直接用"/"也是无奈。问题是,如果多个WordPress都是同一个版本的话,那么就等于是共用该设置,大不了一个WP里调整过顺序,其他的WP也跟着调整了而已。而WordPress 2.0.7和WordPress 2.1里,这段cookie保存的格式是不一样的。WordPress 2.0.7里是:
grabit=2+,3+,4+,5+,0-,1-,6-&advancedstuff=0-,1+,2-
而WordPress 2.1里则是
grabit:3+|0+|5+|4+|1-|2-&advancedstuff:0-|1+|2-
结果我的WordPress 2.0.7读取了cookie,在解析时发现格式不对后,就直接出错了。
没办法,改了一下WordPress
2.1里的dbx.js文件,把path改成目录名。然后把原来的cookie删了,两边都重新调整了一下,这下不冲突了。WordPress
2.0.7里带的是DBX 2.02,而WordPress 2.1里带的是DBX 2.05。找来DBX
2.05的源代码看了一下。从WordPress 2.0.7升级到WordPress
2.1应该没问题的,不会出现错误,因为DBX 2.05里写了一句this.cookie[i] =
this.cookie[i].replace(/\|/g, ',');,哈哈。




