其实我对说说这东西一直都有偏见,我觉得QQ空间也够用了,干嘛用博客写说说呢!所以长久以来从来没弄过说说功能!不过看着越来越多的主题都在搞说说,为了增加卖点,所以我也开搞了,搞了后发现说说也挺香的,因为开放所有人可以看见,但又可以过滤掉QQ上的熟人,这种特点真的挺好的。
说说的方案
主流有三种方案:分类改说说、评论改说说、对接第三方。
- 分类改说说:就是新建立个博客分类,这个分类的文章内容就是说说,针对这个分类页面写说说的样式。优点就是每个说说都是独立的文章,说说内容长了还可以截断点击详情可阅读完整内容,可以说既可以是说说也可以写文章,具有文章所有特性;缺点就是有人订阅了你的博客后你这个说说也会被订阅到,导致对方看到了很多无效的短文章,需要自己针对这个说说分类不输出rss。
- 评论改说说:可以建立独立页面模板,然后将这个独立页面的评论改成说说的样式,一级评论作为说说,二级三级等评论作为说说的评论。优点就是小巧,只利用一个独立页面即可建立说说页面,缺点就是开发适配难度有点大,比如需要限制一级评论仅限站长可发布(也就是说说只有站长能发),再比如上传图片功能需要自行实现。
- 对接第三方:一般是对接公众号啥的,博客这边弄个独立的数据表,或者对接文章表亦或是评论表,公众号上发布说说,博客这边接受展示说说,优点是可以展示的东西比较多,比如语音说说,图片说说什么的,缺点是感觉比评论改说说更麻烦。
这里我们说下如何将评论改成说说。
拦截一级评论
首先是让一级评论只能文章作者发布,因为用到了之前《ajax提交评论》里面的函数,那个函数接收评论的,所以可以在ajax评论函数里面直接做拦截
$user = Typecho_Widget::widget('Widget_User');//获取用户组件
$parentId = $archive->request->filter('int')->get('parent');//获取评论父级,为0则为一级评论
$shenfen=0;//定义个身份变量
if($user->uid>0){if($user->uid == $archive->authorId){$shenfen=1;}}//如果当前用户为文章作者则身份变量改为1
if($archive->template=='say.php'){//如果是说说模板启用以下判断
if($shenfen==0&&$parentId==0){//如果身份不是文章作者同时评论又是一级评论,返回提示信息
$archive->response->throwJson(array('status'=>0,'msg'=>_t('非管理员无法发布说说!')));
}
}
图片上传
我在评论框下面加了个图片上传的按钮,对接的是说说对应的文章附件系统,接口也是参考后台文章附件上传的源码
\Widget\Security::alloc()->to($security);
$url = $security->index('/action/upload?cid=' . $this->cid);//上传接口地址
使用post请求,文件参数为file
附件列表
附件列表输出详见《Typecho根据文章cid输出所有附件并倒序》,插入附件的功能比较简单,就是给图片地址拼点字符串类似这样然后插入到评论框里即可,删除图片附件的接口如下
\Widget\Security::alloc()->to($security);
$url = $security->index('/action/contents-attachment-edit');//删除附件的接口地址
使用post请求,参数为do=delete,cid=附件的cid
前台管理说说
前台删除说说
\Widget\Security::alloc()->to($security);
$url = $security->index('/action/comments-edit?do=delete&coid=当前评论coid');
请求这个地址即可删除评论也就是说说,使用ajax请求体验最佳。
前台编辑说说
这个比较复杂,建议参考后台manage-comments.php文件