Note: 因为后来不再使用这个主题,内容仅供参考 orz。
@良心发现的主题Oneiro,据自称是"折腾html5的即兴之作",里面使用了大量的html新特性,里面有很多实验性的内容。一般情况下,作为在前端凑活过,希望付更多精力在后端的我,会无视掉这个主题才对,但实在太漂亮了,真的很不错。
于是下载过来主题,各种粗暴的修改了一堆设定后,就直接丢小站上上线了。之前一些修改都是属于“我喜欢这样”这种类型的,今天做了一些对白璧微瑕的修改。主要记录的是对评论部分的一些完善。
调回js控制“回复”
良心对评论的回复设置为flat样式,相比于逐渐流行的嵌套版本看起来似乎更和谐一些 ,而且如果做修改,我这个CSS苦手加审美天生缺陷的显然无法做的更好。所以flat格式保持。但问题是,在原有的设计中,a reply b的样子是,b在几层楼上,a在后面@一下上面的b,而且这个@还没有链接。这导致评论的交互就很有问题。而且,原作中虽然@了一下上面,但是comments的数据结构在后台也没有显示出其中的关系。所以以后如果修改主题,改为嵌套格式,这期间的一些对话组织就会很不理想。
检查后台代码,可以看到,这样的结构:
遍历comments list的时候,作者给每个comment item加上了"回复"的超链接,这个超链接调用了这样一个 js function
function to_reply(commentID,author) { var nNd='@'+author+':'; ... var myField = document.getElementById('comment'); ... if (document.selection) { sel = document.selection.createRange(); sel.text = nNd; myField.focus(); } }
其实就是做了三件事情,找到comment的form,给它的textarea添加个内容,焦点定位过去。
根据需求,第一个修改就是给这个"添加点内容"加点料。因为commentID已经到手,所以直接修改nNd的值就可以。
前面第二行修改为
var nNd='<a href=\'#comment-'+commentID+'\'>@'+author+' </a>';
这样,每个评论@的对方看起来就有力多了,点击超链接可以直接到被评论的楼层去了。
之前我是直接把它修改为发一个post,然后用WP自带的方法解决的,显然这是不合适的。
评论的嵌套
wordpress的评论表单大致是如下这样的:
mysql> show columns from wp_comments; +----------------------+---------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------------+---------------------+------+-----+---------------------+----------------+ | comment_ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | comment_post_ID | bigint(20) unsigned | NO | MUL | 0 | | | comment_author | tinytext | NO | | NULL | | | comment_author_email | varchar(100) | NO | | | | | comment_author_url | varchar(200) | NO | | | | | comment_author_IP | varchar(100) | NO | | | | | comment_date | datetime | NO | | 0000-00-00 00:00:00 | | | comment_date_gmt | datetime | NO | MUL | 0000-00-00 00:00:00 | | | comment_content | text | NO | | NULL | | | comment_karma | int(11) | NO | | 0 | | | comment_approved | varchar(20) | NO | MUL | 1 | | | comment_agent | varchar(255) | NO | | | | | comment_type | varchar(20) | NO | | | | | comment_parent | bigint(20) unsigned | NO | MUL | 0 | | | user_id | bigint(20) unsigned | NO | | 0 | | | comment_mail_notify | tinyint(4) | NO | | 0 | | +----------------------+---------------------+------+-----+---------------------+----------------+
其中comment_parent这个column其实就是被评论人的id,如果没有人,则为0。
良心的这款主题使用的是Willin Kan做的comments-ajax.php,检查这个php,可以看到,
$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0;
所以只要ajax提交这个form中有就comment_parent可以了这个变量就可以了。
而wp的表单被提交的form中就含有comment_parent这个element
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
所以只要修改在刚才to_reply的function中修改掉它的值即可。
在to_reply的function中加一句
document.getElementById('comment_parent').value = commentID;
一句话解决问题。
回复邮件提醒
之前使用的是WP Mail SMTP和Mail to Commenter,WP Mail SMTP是一直都在使用并且很好用的,Mail to Commenter是主题制作人良心官方推荐的。但是效果并不如人意。后来修改为Configure SMTP + Comment Reply Notification 的组合,测试了几次发现表现不错。虽然不知道未来是否能保持稳定,但至少目前已经可以完美收工了。
12 Comments
tiandi · January 17, 2014 at 10:34
wp有个函数wp_mail()
yu · January 18, 2014 at 00:02
@tiandi 我找找它的实现.如果我没有猜错的话,WP Mail SMTP这些插件就是为了在调用wp_mail()这个函数的时候,启用当前配置的smtp服务器,账号和口令的
tiandi · January 16, 2014 at 15:24
服务器不支持wp_mail???
yu · January 17, 2014 at 08:59
@tiandi 你是说自带的mail?那样就不可以用smtp了说
欧美头像贴吧 · January 6, 2014 at 10:18
htm5优越性啊。。
reizhi · January 2, 2014 at 09:26
听说可以评论了,我来试试
yu · January 2, 2014 at 15:40
@reizhi 的确恢复了,不过为啥后台见一个杀一个呢。。。太冷酷的说
Leniy · December 16, 2013 at 09:52
Configure SMTP + Leniy Tweak飘过
yu · December 16, 2013 at 12:11
@Leniy 果然各种leniy tweak , 我使用过一段时间,表示不会用 TAT
还有个关键问题:我的回复你邮件能收到么?
Leniy · December 16, 2013 at 12:56
@Yu Jing 不会用?启用就可以了,没什么设置的。
我没登录邮箱,不清楚。等一会儿我看看去
Leniy · December 16, 2013 at 13:21
@Yu Jing 邮件收到了
yu · December 16, 2013 at 13:30
@Leniy 多谢