8月快过去了。时间真的是。。。。
顺便记下这几天对网站的一些小小的折腾吧。
1. 多说评论显示逻辑调整:
还是要从多说说起: 路杨已经基本上实现了把所有的多说评论同步到了本地。 默认同步到多说评论处于未发布状态,防止和多说JS载入的评论形成重复评论。 定时把本地数据库的多说评论转成发布状态,以防止多说服务器抽风导致评论不显示。
但是问题来了: 怎么让同步并本地发布的同一条评论只显示一次呢? 原来的实现办法是在 多说JS 中识别这条评论是否已经本地发布,如果发布则 hook 多说JS 的 templates.post
函数,让它不生成这条评论。
核心代码如下:
codevar DSinMTids = [];
function check_ds_in_mts() {
DSinMTids = [];
$("#comments-content div.ds-post-self").each(function()
{
if ( ( $(this).attr("data-source") == 'duoshuo' ))
{
DSinMTids.push($(this).attr("data-post-id"));
}
});
}
check_ds_in_mts();
var _D_post=DUOSHUO.templates.post;
DUOSHUO.templates.post=function (e,t){
var rs=_D_post(e,t);
if ( $.inArray(e.post.post_id, DSinMTids) != -1 return '';
/* sth others*/
return rs;
}
后来觉得这个逻辑不是很正确, 这样会导致 多说 JS 产生的评论不美观。
于是逻辑关系改成, 在 多说 JS 中识别这条评论是否已经本地发布,如果发布则 hook
多说JS 的 templates.post
函数,让它隐藏本地HTML中的本地发表的同名评论。
核心代码如下:
codevar DSinMTobj={};
function check_ds_in_mts() {
$("#comments-content div.ds-post-self").each(function()
{
if ( ( $(this).attr("data-source") == 'duoshuo' ))
{
var ds_id= $(this).attr("data-post-id");
DSinMTobj[ds_id] = $(this).closest(".ds-post");
}
});
}
check_ds_in_mts();
var _D_post=DUOSHUO.templates.post;
DUOSHUO.templates.post=function (e,t){
var rs=_D_post(e,t);
var ds_id= e.post.post_id;
if ( DSinMTobj[ds_id] ) { var el =DSinMTobj[ds_id];el.hide();};
/* sth others*/
return rs;
}
这样看起来舒服一些。
接下来,路杨准备逐步把 MT 本地评论也仿照 多说的 JSON
格式进行 JS
化,以减轻服务器压力。 后台程序已经实现,下面就是前端 JS 脚本编写了。
后台脚本地址为:
http://mt.easun.org/cgi-bin/mt/cms?__mode=comment_listing&entry_id={entryID}
2. QQ登录插件修正:
改动很小,其实就是做到更正规了。
原来为了节省资源, QQ登录用户的头像我并没有下载到本地,而是为 QQ|头像地址
的方式写进了数据表 url
字段(本意为网站地址)。
然后在现实的时候,识别读取的 url
是否以 QQ|
开始,然后手动赋值给 userpic
。 换句话说, url
代表的含义被彻底转义了并实际上废弃了。。
这次利用 MT5 已经废弃的 hint
字段来存储远程头像地址。 这样在显示的时候不会占用 url
字段。
同时, 换用 external_id
字段来存储QQ服务器返回的 QQ openID。 而不是原来的 name
字段。
这样一来。 用QQ登录的朋友,也可以自由改动在本站点资料了。 地址为:
http://mt.easun.org/cgi-bin/mt/cms?__mode=edit_profile ( 请登录后访问哦。)
*QQ登录插件基本已经没有任何BUG了。 等晚点时间整理出来,共享给同好吧。 *
3. 其他
- 暂时取消了 pjax ,为什么取消呢,因为
cache
。。 因为 MT 纯HTML, 而pjax
的cache
导致 ajax 取回来的数据在 html后台修改后居然不更新,检测代码。发现pjax
是检查特定的 header (x-pjax-version
)来识别是否重载,而不是检查If-Modified-Since
。 因为是静态,无法发送自定义x-pjax-version
header, 干脆暂时取消。- 正式启用 UPYUN(又拍云)的 CDN 。 国内的云, 速度的确不一样。暂时只是把
images
,js
,css
等目录放置在了 UPYUN 。 希望访问速度能有所提升。
MT 本地评论 js 化已经初步实现。
下来的问题就是 JS 闭包 和优化。
试试本地评论
感谢测试。 目前仅仅是提交评论,后台通过 JSON 刷新评论而不重新生成页面,但是你不登录的话,评论自动进入“审核”状态,测试不出来的:)
今天算基本上把 js 的所有功能都实现了。 ajax 方式提交评论,如果通过审核,则不刷新更新新的评论。
MT 的评论机制现在无法自动审核匿名(即不登录,仅仅手动输入名字和email)的用户。
测试新版本的 ajax 提交效果。
QQ 登录会方便好多,不过得备案的域名才能申请吧?
QQ登陆不需要备案。比如我现在用的域名就没有备案的。
只是申请批准的效率不敢恭维。
PS: 多说镜像抽风了。所以。你的本地评论头像暂时没有显示。改天换成 cn。。。
国内加速会快狠多
感觉到快了没有? 我这里没有感觉到。