Typecho 《HelloChangYan》插件500错误以及优化

命中水ヽ

畅言logo


原文是在我自己博客中,小伙伴也可以点阅读原文进行跳转查看,还有好听的背景音乐噢~

HelloChangYan

HelloChangYan是一个typecho的畅言评论回推插件,顾名思义就是在网站中使用了畅言评论之后,把评论内容以及一些参数数据回推到网站,达到网站评论和畅言同步的效果。

功能是个好功能,但是在下载的插件包中发现了一些BUG,而且在使用步骤以及文件注释中作者并没有提及这些,想联系作者,但是始终找不到作者的联系方式,那只有自己修改了。主要有两点

  1. 路径问题,导致出现500报错
  2. 字符串替换问题,导致评论数据插入评论表异常

下面就谈一下出现bug的地方和改善方法

问题以及改善

问题都是出现在feedback.php文件中,先看一下这个文件的源码:

feedback.php源码截图

上图为feedback.php的源码截图,我在图中做了标记的1、2两处就是需要修改的地方。

修改路径

第一处:

require_once dirname(__FILE__) . '/config.inc.php';

上述这段代码的意思是引入在当前目录中的config.inc.php文件,但是在我们的目录列表中并没有找到这个文件,回想一下,config.inc.php这个文件好像就是typecho的配置文件,作者的真正意图应该是想要引入这个文件,所以我们修改为:

require_once '../../../config.inc.php';

让它去项目根目录找到config.inc.php并引入,便可解决问题

替换指定字符串

第二处:

$title = str_replace(' - Hello World', '', $jsonp->title);

由上述代码得知,是去掉 - Hello World字符串,并得到一个新的字符串,也就是网站中存在的真实的文章标题。这个标题用来查找文章ID,在$rows = $db->fetchAll($db->select()->from('table.contents')->where('title = ?', $title));这段代码中可以看出。
接上段,实际上畅言返回json数据的title值,并没有 - Hello World字符串,这是什么原因呢?我们看一下,畅言实际返回的json数据(以我的网站为例):

畅言推送的json数据

从上面title字段中可以看出,返回的title是一个文章标题+文章撰写人的一个组合。通过这点我们就可以理解了,上面的代码是为了去掉多余的文章撰写人,得到文章标题。我们需要根据网站中的实际情况进行修正,比如我的标题中返回的撰写人是命中水,那么去掉命中水就可以了。

$title = str_replace(' - 命中水', '', $jsonp->title);

那么如何获取网站撰写人呢?我们可以先把畅言返回的json数据保存在本地,然后查看title字段得到。

注意:在 - 命中水中的左右各有一个空格,不要漏了;

做完上述工作,再把代码简单优化一下,差不多就是这个样子:

优化后的feedback.php

以上就是这次发现的问题和优化方法,我已经打包好了,放在文章末尾资源目录下,需要的可以去下载;

使用说明

找到这个插件的地方几乎都配有使用步骤描述,但是描述基本上都是零散或者不全面的,我把这些整理总结了一下,放在下面,第一次使用的小伙伴可以作为参考:

  1. 先把HelloChangYan插件上传到typecho的usr/plugins目录下
  2. 把HelloChangYan目录里的comments.php文件复制到现在正在使用的主题目录下,替换掉comments.php
  3. 畅言官网注册一个账户,并在后台首页得到畅言秘钥,APP IDAPP KEY
  4. 登陆typecho的博客后台主页,在插件列表里启用HelloChangYan,并打开设置,在设置页的畅言appid畅言appkey文本框中填写,上一步骤获取的APP IDAPP KEY
  5. 在设置页可以看到回推地址,这个文本框中有一串url,这个url就是畅言推送评论的回推地址,复制这个链接,然后进入畅言后台,找到系统设置->通用设置->高级设置,在评论回推地址的文本框里填写刚刚复制的回推地址,点击确定,并下拉到页面最底部,保存设置。
  6. 上面都配置好之后,回到HelloChangYan的设置页,在最后一个选项中,启用畅言即可。

以上就是这款插件的使用说明了。

资源

阅读 3k

滴水石穿
滴水石穿,水到渠成。
4.9k 声望
265 粉丝
0 条评论
你知道吗?

4.9k 声望
265 粉丝
宣传栏