HelloChangYan
HelloChangYan是一个typecho的畅言评论回推插件,顾名思义就是在网站中使用了畅言评论之后,把评论内容以及一些参数数据回推到网站,达到网站评论和畅言同步的效果。
功能是个好功能,但是在下载的插件包中发现了一些BUG,而且在使用步骤以及文件注释中作者并没有提及这些,想联系作者,但是始终找不到作者的联系方式,那只有自己修改了。主要有两点
- 路径问题,导致出现500报错
- 字符串替换问题,导致评论数据插入评论表异常
下面就谈一下出现bug的地方和改善方法
问题以及改善
问题都是出现在feedback.php文件中,先看一下这个文件的源码:
上图为feedback.php的源码截图,我在图中做了标记的1、2两处就是需要修改的地方。
修改路径
第一处:
上述这段代码的意思是引入在当前目录中的config.inc.php文件,但是在我们的目录列表中并没有找到这个文件,回想一下,config.inc.php这个文件好像就是typecho的配置文件,作者的真正意图应该是想要引入这个文件,所以我们修改为:
让它去项目根目录找到config.inc.php并引入,便可解决问题
替换指定字符串
第二处:
由上述代码得知,是去掉 - Hello World
字符串,并得到一个新的字符串,也就是网站中存在的真实的文章标题。这个标题用来查找文章ID,在$rows = $db->fetchAll($db->select()->from('table.contents')->where('title = ?', $title));
这段代码中可以看出。
接上段,实际上畅言返回json数据的title值,并没有 - Hello World
字符串,这是什么原因呢?我们看一下,畅言实际返回的json数据(以我的网站为例):
从上面title字段中可以看出,返回的title是一个文章标题+文章撰写人的一个组合。通过这点我们就可以理解了,上面的代码是为了去掉多余的文章撰写人,得到文章标题。我们需要根据网站中的实际情况进行修正,比如我的标题中返回的撰写人是命中水,那么去掉命中水就可以了。
$title = str_replace(' - 命中水', '', $jsonp->title);
那么如何获取网站撰写人呢?我们可以先把畅言返回的json数据保存在本地,然后查看title字段得到。
注意:在 - 命中水
中的—
左右各有一个空格,不要漏了;
做完上述工作,再把代码简单优化一下,差不多就是这个样子:
以上就是这次发现的问题和优化方法,我已经打包好了,放在文章末尾资源目录下,需要的可以去下载;
使用说明
找到这个插件的地方几乎都配有使用步骤描述,但是描述基本上都是零散或者不全面的,我把这些整理总结了一下,放在下面,第一次使用的小伙伴可以作为参考:
- 先把HelloChangYan插件上传到typecho的usr/plugins目录下
- 把HelloChangYan目录里的comments.php文件复制到现在正在使用的主题目录下,替换掉comments.php
- 去畅言官网注册一个账户,并在后台首页得到畅言秘钥,APP ID和APP KEY
- 登陆typecho的博客后台主页,在插件列表里启用HelloChangYan,并打开设置,在设置页的畅言appid和畅言appkey文本框中填写,上一步骤获取的APP ID和APP KEY
- 在设置页可以看到回推地址,这个文本框中有一串url,这个url就是畅言推送评论的回推地址,复制这个链接,然后进入畅言后台,找到
系统设置->通用设置->高级设置
,在评论回推地址的文本框里填写刚刚复制的回推地址,点击确定,并下拉到页面最底部,保存设置。 - 上面都配置好之后,回到HelloChangYan的设置页,在最后一个选项中,启用畅言即可。
以上就是这款插件的使用说明了。
资源
- 优化之后的HelloChangYan插件包,点我下载