Typecho文章评分插件

绛木子 31.9k 95 5

看到@ClayMore 留言所说了投票评分插件,试着弄了一下,大致实现了基本的功能。这里记一下自己Coding的过程,欢迎大家拍砖!

插件思路:

首先需要两个字段来保存评分数据

ratingsNum:评分用户数
ratingsAverage:平均评分

最直接的想法就是在contents表中添加两个字段

if (!array_key_exists('ratings_users', $db->fetchRow($db->select()->from('table.contents'))))
            $db->query('ALTER TABLE `'. $prefix .'contents` ADD `ratingsNum` INT(10) DEFAULT 0;');
if (!array_key_exists('ratings_average', $db->fetchRow($db->select()->from('table.contents'))))
            $db->query('ALTER TABLE `'. $prefix .'contents` ADD `ratingsAverage` DECIMAL(2,1) DEFAULT 0.0;');

然后使用 Helper::addAction() 方法添加一个供评分操作的路由

Helper::addAction('rating', 'TePostRatings_Action');

按照这个思路,很快就实现了这个功能。但是!!!
只要启用了评分插件,所有的文章都会有评分的功能,难道再添加一个字段来控制文章是否启用评分?
还是不要在contents表中添加太多字段了吧!

于是重新想办法:使用Typecho自定义字段
在需要启用评分功能的文章中,直接定义两个字段用于保存评分数据
直接在模版中调用插件用于显示投票评分的方法,如果没有自定义评分字段,则直接返回

使用方法

1、在后台启用‘TePostRatings’插件(会在内容表(contents)中新增两个字段:ratingsNum:评分用户数;ratingsAverage:平均评分;),
2、把<?php TePostRatings_Plugin::rating();?>放在模版中需要显示的位置;
3、在页面查看效果

还可以使用TePostRatings_Plugin::show($config,$pattern)调用评分排行

$config = 'order=num(或average)&sort=desc&limit=10'       //显示参数
$pattern = '<li><a href="{permalink}">{title}</a></li>'  //显示样式

2015.07.04更新

直接把字段添加到contents字段

下载地址:TePostRatings

欢迎大家下载测试,不推荐直接使用