StatPressCN,1.6.9.9版本

功能开发:

  1. 在朋友来访栏目中为朋友添加头像(gravatar),更直观;
  2. 增加了对朋友留言情况的统计显示,总留言数,最近一次留言时间和内容;
  3. 增加对朋友总访问数的统计显示;
  4. 丰富了详情中的内容,增加了直接点击发邮件给朋友的功能。

def规则:

  1. 搜索引擎数据定义:新增了对Google mobile的支持,www.google.cn/m;lai79的识别,www.lai79.com;
  2. 爬虫数据:北大学生爬虫的识别,PKU Student spider。

代码改进:

  1. 更新了部分本地化语言;
  2. 修正了对sharethis识别逻辑;
  3. 彻底解决了朋友中仍显示垃圾评论者的问题。

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

升级需做:

  • 在StatUpdate(统计升级)中任何选项都不需要选中,执行一次升级(就是点那个升级按钮),作用是清理垃圾评论者的访问记录。

开发笔记

对于sharethis的逻辑判断经检查还是出了问题,应该分两层:先判断querystring中是否包含akst_action字样,如果有的话还要看是否包含了p=90之类的链接符号,后者说明blog没有设置永固链接,需要从querystring中提取出文章链接;如果仅包含akst字符串,则放弃querystring,转用requesturi。【换了种思路解决问题简单好多,还有效率也有很大提升,那就是先判断?后是否有p=99之类的硬链接,有的话就提取,并根据是否设定了永固链接获得permalink后存入数据库,如果没有则只取?前的部分直接存入数据库,判断提取语句如下:preg_match(“@(p=\d+|post_id=\d+|page_id=\d+)@”,$urlRequested,$matches)】

wordpress在2.7以上版本中是默认支持gravatar的,用法其实很简单,就是调用get_avatar($email)就ok了。如果要全面,可以加个判断版本低的话直接调用img src,用链接直接调用。

<span>在css中还是比较好用的,一连串的span不会像p那样自动换行。

单复数的问题用?符号最好处理:print $commentleft.” “.($commentleft>1?__(“comments”,”statpresscn”):__(“comment”,”statpresscn”));

在判断是否垃圾评论者的逻辑上,分析如下:先允许所有评论者进来,让Akismet进行过滤,让管理员对首次留言者进行审核,然后再显示朋友来访时再判断是否是正常的朋友留言或访问,通过手动统计更新清除那些垃圾评论者的访问记录(这个应该设定成自动)。

StatPressCN,1.6.9.7版本

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

升级需做:

  • 无。

功能开发:

  1. 侧栏小工具“最热博文”中可设定时间范围了,比如最近7天的热文、最近三个月的热文等;
  2. 在管理面板上显示统计信息;
  3. 过滤掉user heart5的访问记录,方便测试;
  4. 不定期优化统计数据库(1000次访问执行一次);
  5. 所有的统计子页面都添加效率执行检测模板,在页脚。

def规则:

  1. 增加了两个Google的新规则。

代码改进:

  1. 更新了部分本地化语言。

开发笔记

Maxim提了几个建议,一个是在“详情”中显示的页面包括首页是不应该的,这个数据和widget中最热博文不一致,其次是希望在“最热博文”中可增加时间范围选择。第一个问题me系统思考了下,还是坚持目前的做法。因为在这里是对所有链接请求的统计,比如tag、分类等,和页面是同等地位,但是在博文中则仅仅针对帖子文章,这两个不是一码事。在“最热博文”中增加时间选项倒很实用,me已经实现了这个功能,现在您可以自由设定时间,显示“最近三个月的最热贴”等。解决这个问题的时候me发现widget的所有信息是以数组的形式存放在option表中的。

看到akismet中有个随机执行comments数据库清理优化的代码,觉得很好。既不用每次都运行,消耗系统资源,又能在一定时间内实现代码的执行。运用了mt_rand函数产生随机数,然后设定一个幸运数,符合的时候就执行一次。呵呵,照抄过来,用在了statpress统计数据库的清理优化。再一个想学习的地方是akismet在管理面板中显示的统计信息,比如过滤了多少垃圾评论等。检查代码原来是使用了add_action(“activity_box_end“,’heart5_dashboard_4_spc’);直接借鉴过来就好了。StatPressCN在这里显示的信息是StatPressCN widget中的信息,不过关于版权标记和页底效率监测则需要过滤掉,需要判断是在哪里调用的。如果是管理界面就不显示,正常的来访则显示。

StatPressCN,1.6.9.6版本

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

功能开发:

  1. 和wp-comments数据库联动,自动过滤掉垃圾留言者的访问记录;这样“朋友来访”显示的朋友访问列表就更精准了
  2. 修正了widget中可用参数不准确的问题,主要涉及今日来访数量、昨日来访数量、今日页面访问数量、昨日页面访问数量;
  3. “朋友来访”中显示的数量增加了50的选项卡,现在可以设定为5、10、20或50个了。

def规则:

  1. 增加了yahoo日本、cnnic的搜索引擎规则;
  2. 增加了Ginxbot、FairShare、Congentbot爬虫规则的识别。

代码改进:

  1. 在“支持”的调试信息中增加了时区和utc时间、本地时间内容显示;
  2. 在“支持”函数体中共享global $wpdb;
  3. 增加了对博客网址的识别,对me的天高云淡不再显示iframe框架调用;
  4. 动态识别blog网址(通过get_option(‘home’)函数;
  5. 修正widget中可调用参数的时间识别。

升级需做:

  • 升级至1.6.9.6版本后,请进入“系统更新”,选项卡一个都不要选,运行一次“更新统计系统和数据记录”,这样会清理掉那些垃圾留言者的访问记录。

开发笔记

听了dust2k朋友的建议后开始认真考虑过滤掉垃圾留言者。原来曾经尝试过,对akismet的运作机制不甚了了,也就作罢了。这次重新启动,一定要搞定。仔细研读了akisme的代码,它主要是针对comments进行相关处置的,并且是借助了集中存放规则的网络服务器进行的,每次判断都会提交到查询服务器上去(这种机制其实是最高效的,sharethis就是这样升级的,可惜me没有服务器资源,只好在每个版本中自带dat文件进行规则更新)。打开wordpress的默认数据库comments看了下,记录了每条留言的id、ip、agent、内容、留言者等等,其中有一项是是否验证通过。仔细考虑了下,其实基本不关akismet的事情。在StatPressCN记录ip之前,看看是否是comments表中被标记为spam就行了。

昨日访问和今日访问数据不对,刚开始以为差一天,后来发现差了是几个小时。上午测试发现不仅仅是8个小时,而是16个小时,看来问题出在时区。简单的查阅了mysql的时间函数后就更改了代码,结果和php的gmdate不太一样。关键还是时区问题。经过仔细测试,发现还是utc时间好用。机制大约这样:查找blog option中的时区设定,再结合utc时间进行处理,就能得到当地时间。但是用sql语句得到时间效率高还是php本身的时间函数效率高就不清楚了,以后有时间再测试下。

关于PHP开发工具Netbeans IDE for PHP和版本管理工具svn的应用

近段一直在用Netbeans IDE early access for PHP开发StatPressCN,感觉还不错。刚好上午看到冰古在讨论PHP开发工具的问题,me觉得还是有必要给大家秀下NB for PHP。另外,顺带讲讲svn的应用。

其实me一直挺喜欢Netbeans IDE的,因为开源以及令人惊讶的运行速度,原来玩儿JAVA的时候几乎就是拿它做主力工具使用了。前段时间开发玩儿WordPress,需要弄一个PHP开发工具的时候才发现Netbeans IDE已经支持PHP开发了。直接拿来用,也没啥过度和其他考量,很顺利。为WordPress开发插件,必然涉及代码的版本管理,原来做JAVA时NB对cvs良好的支持me仍记忆犹新,看到WordPress的plugins是由svn进行管理的时候心里还在担忧为什么不用cvs呢。具体使用了才发现其实Netbeans IDE已经内置了对svn的支持。很好。

要搭建一个WordPress插件的开发环境,首先请到Netbeans的官方网站下载Netbeans IDE 6.1发布版的php预览版本并安装(提醒:不要用最新的6.5版本,svn支持有问题),然后到svn的官方网站下载客户端并安装。

然后进入NB的Options-》Miscellaneous-》Versioning-》SubVersion,设定刚才安装的svn工具的目录。

netbeans_ide_early_access_for_php_version_options_misc_versioning
netbeans ide early access for php version options misc versioning

下面需要做的签出代码,构建开发项目。

netbeans ide early access for php svn checkout
netbeans ide early access for php svn checkout

开发项目设定好后就可以进入开发界面了,功能还是很强大的。

me蓝点标明的地方是svn相关的一些信息显示。文件改动后,在项目栏中会自动把该文件标蓝,上方的tab标签页会显示为蓝色并提示已经修改;在代码编辑窗口中,增加修改处用蓝色表示,删除了则是红色;另外贴心的是如果您在view中设定了查看diff,则在最右侧会有很多小横线:蓝色(代表增加或修改了内容)、红色(代表删除了内容)以及橙色(是警告,比如html代码标签丢失等)、灰色(说明那里定义了书签),点击可以到该位置,可以很方便的浏览代码。

在项目窗口中点鼠标右键则可以看到svn的全部相关功能菜单。可以提交代码,显示版本信息等等。

netbeans ide early access for php svn function
netbeans ide early access for php svn function

不过在具体使用过程中,通过NB IDE中图形化的方式进行copy to从来没有成功过。me只好在命令行中手动完成,步骤如下:

  1. 在NB IDE中完成修改后程序文件的commit;
  2. 进入checkout出来的目录,运行svn up(记得把svn所在目录加入电脑的环境变量中)把本地的代码仓库更新到最新状态;
  3. 然后svn cp trunk tags/1.6.6.9;
  4. 然后提交svn ci -m “tag 1.6.6.9″;
  5. Done。

原来在使用tags拷贝的时候svn经常提示出错,害得me只好不停的svn co,在电脑目录中设置了很多子目录来存放每次下载;现在通过以上的方式从来就是一次成功,仔细想想可能是没有先运行svn up的关系。

wordpress汉化使用和技巧

语言障碍是国内用户的普遍问题,这很要命,要知道按照我们国家目前的发展轨迹,我们非依赖欧美英语文化不可,因为我们好像一切都在学习他们,一切好东西好像都是那边传过来的。不懂英文就像是把窗户都关上了,唉,悲惨的很。要解决这个问题,不能要求中国像印度那样当回殖民地,那就只能全民学英语,效果又很差,咋办,把英文即时转成汉语就好了。说起来简单,做起来很难,因为这是个系统工程,所涉甚多甚广。教育线:原来从初中开始的英语课现在已经从幼儿园开始了,效果咋样确实难说,但现在很难找到工作的大学生英语水平普遍较差却是事实;专业线:外国语学院算是专业培养语言人才的了,但它们能做的事情仍然是影响所谓翻译界,圈子很小;技术线:Google的在线语言翻译蹒跚到现在中算小有所成,但和实用差距还不是一般的小,不知所云的翻译比比皆是,将来wiki方式的纳入可能会解决部分问题,但实用化仍很难,需要理论的突破和技术的积累;志愿者线:me刚加入的译言是典型,靠兴趣和志愿精神及时转化国外最新讯息,很难成规模;工具线:遍地开花的汉化网站好像都活的不错,实际情况是连me已经比较喜欢(这两年基本不去了)汉化新世纪也在逐步商业化庸俗化,不是能找来crack,估计去的人也不会多,但把一些实用的日常的工具中文化应该是比较现实也比较实用的。感慨发完,me来说说如何汉化wordpress这个最流行的blog工具系统。

一、如何使用wordpress的中文包

随着wordpress的流行,国内做汉化的还是很多,您可以在网上随便Google下就可以找到很多中文包,各个版本的都有。me这里讲讲如何使用。

  1. 得到特定版本wordpress的中文语言包。版本一定要对应,是2.6.3就是2.6.3,不可混用。得到的中文语言包应该是后缀名为mo的文件,名称一般是zh_CN.mo这样的。
  2. 把该文件上传到服务器blog安装目录(不见得是根目录哟)下的wp-includes/languages下。
  3. 修改blog安装目录下的wp-config.php,找到增加修改语句define (‘WPLANG’, ‘zh_CN‘);。注意到没有这个定义和语言包是对应的。
  4. OK!再进入blog的管理后台就是中文界面了。当然,大家访问您的blog时会发现部分内容已经是中文了,比如分类标签之类的,但很不完全,这取决于您使用的主题是否汉化了。

二、如何汉化主题或插件

一般情况下,主题和插件都是英文的,因为是英语用户开发的,即使是中国人开发的,考虑到兼容沟通等问题,界面也一般是英文的。怎么办?首先我们要看看该主题或插件是否支持汉化(对我们是汉化,也可能是韩化或印度化,呵呵,其实这里是指国际化语言支持),标志是代码中是否有__($text)_e($text)__ngettext($single,$plural,$number),如果有这样的命令,有门,否则就算了吧,除非您确实懂php编程,那样的话您可以手工把上面修改成支持国际化语言的版本,呵呵。我们就按支持国际化语言的说吧。

  1. 下载poedit软件并安装,然后选择中文语言界面。
  2. 新建消息目录文档。填写相关信息:首先是工程信息,包括工程名称版本(自填,这里那akismet做例子)、团队(自填)、专用电子邮件(自填)、语言(Chinese)、国家(CHINA)、字符集(UTF-8,推荐选这个)、源代码字符集(一般也是UTF-8)、复数形式(这样写:nplurals=2; plural=1;)等;其次是路径,包括基本路径(这个很关键,是您要汉化的主题所在目录,不提供浏览功能,需要您手动记录并填写进去)和路径(填小数点.,是当前目录的意思);第三是关键字(加三个,分别是___e__ngettext:1,2
  3. 确定后会提示保存po文件。您要找到源文件的目录并把文件名称从default.po改为zh_CN.po,保存。
  4. 在消息目录文档管理员界面中找到akismet工程,双击刚才命名的那个akismet-zh_CN.po,进入翻译窗口。
  5. 翻译界面很直观,在左下角窗口写您的翻译,右下角窗口写注释(这个me一般没写,呵呵);逐条翻译后按第二个按钮保存。以后如果代码更新了(比如升级了版本之类的),只要名称未变,您按第三个按钮(就是那个互联网地球)可以更新需要翻译的语句。
  6. 翻译好了就保存吧。没其他工作了,您只需要把生成的akismet-zh_CN.mo上传到服务器上该插件目录就行了。

三、注意事项和技巧

翻译的时候不需要规规矩矩,可以有些个性化的甚至俏皮的翻译,比如me对自己开发的StatPressCN中文化时,就把TOP DAY翻译成了“洪水泛滥的日子”,呵呵。

四、me汉化的主题和插件中文语言包(暂缺

主题

插件

五、更多资源

如果有兴趣,您可以看看下面这些文章,讲理论还是比较系统的。

汉化WordPress教程

WordPress汉化手册

正确使用gettext来翻译Wordpress主题