环球短讯!typecho打造点赞功能(案例教程)
typecho打造点赞功能(案例教程)
Typecho 默认是没有提供点赞相关的 API 的,需要涉及到数据库操作
编写函数
【资料图】
Typecho 提供了一个 functions.php,可以用来定义函数,数据库相关的操作就放在 functions.php 中。
下面编写两个函数,agreeNum 函数用来获取点赞数量,agree 函数用来点赞。
agreeNum 函数:
function agreeNum($cid) {
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
// 判断点赞数量字段是否存在
if (!array_key_exists("agree", $db->fetchRow($db->select()->from("table.contents")))) {
// 在文章表中创建一个字段用来存储点赞数量
$db->query("ALTER TABLE `" . $prefix . "contents` ADD `agree` INT(10) NOT NULL DEFAULT 0;");
}
// 查询出点赞数量
$agree = $db->fetchRow($db->select("table.contents.agree")->from("table.contents")->where("cid = ?", $cid));
// 获取记录点赞的 Cookie
$AgreeRecording = Typecho_Cookie::get("typechoAgreeRecording");
// 判断记录点赞的 Cookie 是否存在
if (empty($AgreeRecording)) {
// 如果不存在就写入 Cookie
Typecho_Cookie::set("typechoAgreeRecording", json_encode(array(0)));
}
// 返回
return array(
// 点赞数量
"agree" => $agree["agree"],
// 文章是否点赞过
"recording" => in_array($cid, json_decode(Typecho_Cookie::get("typechoAgreeRecording")))?true:false
);
}
上面的函数很简单,下面是说明:
判断存储点赞数量的字段是否存在。如果点赞数的字段不存在就创建。
查询出点赞数量。
获取点赞记录的 Cookie。
判断文章是否点赞过。
返回点赞数量和点赞记录。
上面的 agreeNum 函数调用的时候需要传入一个 cid,cid 就是 Typecho 的文章 ID。
agree 函数:
function agree($cid) {
$db = Typecho_Db::get();
// 根据文章的 `cid` 查询出点赞数量
$agree = $db->fetchRow($db->select("table.contents.agree")->from("table.contents")->where("cid = ?", $cid));
// 获取点赞记录的 Cookie
$agreeRecording = Typecho_Cookie::get("typechoAgreeRecording");
// 判断 Cookie 是否存在
if (empty($agreeRecording)) {
// 如果 cookie 不存在就创建 cookie
Typecho_Cookie::set("typechoAgreeRecording", json_encode(array($cid)));
}else {
// 把 Cookie 的 JSON 字符串转换为 PHP 对象
$agreeRecording = json_decode($agreeRecording);
// 判断文章是否点赞过
if (in_array($cid, $agreeRecording)) {
// 如果当前文章的 cid 在 cookie 中就返回文章的赞数,不再往下执行
return $agree["agree"];
}
// 添加点赞文章的 cid
array_push($agreeRecording, $cid);
// 保存 Cookie
Typecho_Cookie::set("typechoAgreeRecording", json_encode($agreeRecording));
}
// 更新点赞字段,让点赞字段 +1
$db->query($db->update("table.contents")->rows(array("agree" => (int)$agree["agree"] + 1))->where("cid = ?", $cid));
// 查询出点赞数量
$agree = $db->fetchRow($db->select("table.contents.agree")->from("table.contents")->where("cid = ?", $cid));
// 返回点赞数量
return $agree["agree"];
}
上面的函数也很简单,下面是说明:
获取点赞记录的 Cookie。
如果 Cookie 不存在就创建一个。
判断文章是否点赞过。
如果文章点赞过就不再往下执行。
把文章的 cid 添加到点赞记录的 Cookie 中。
更新点赞字段。
查询出点赞数量。
返回点赞数量。
点赞记录的 Cookie 是一个 JSON 字符串,需要读取或更改的时候就需要转换为 PHP 对象,更改完成后需要转换为 JSON 字符串写入 Cookie。
点赞记录的 Cookie 中保存着文章的 cid,每次点赞 文章的 cid 就会被加到 Cookie 中。如果要判断文章是否点赞过就可以判断文章的 cid 是否存在。
文章页
Typecho 用来输出文章的文件是 post.php,处理点赞和展示点赞数量就需要在这个文件中编写。
下面是处理点赞的部分:
// 判断是否是点赞的 POST 请求
if (isset($_POST["agree"])) {
// 判断 POST 请求中的 cid 是否是本篇文章的 cid
if ($_POST["agree"] == $this->cid) {
// 调用点赞函数,传入文章的 cid,然后通过 exit 输出点赞数量
exit(agree($this->cid));
}
// 如果点赞的文章 cid 不是本篇文章的 cid 就输出 error 不再往下执行
exit("error");
}
上面的点赞处理需要放到 post.php 的顶部,也就是放到 HTML 代码的前面。这里如果判断是点赞请求就只会处理点赞,不会往下执行。
我的点赞数量是显示在点赞按钮中的,下面是显示输出点赞数量和点赞按钮。
获取点赞数量:
hidden?array("agree" => 0, "recording" => true):agreeNum($this->cid); ?>
上面首先判断文章是否加密,如果加密就把点赞数设置为 0,然后禁止点赞,否则就调用函数获取点赞数量。
点赞按钮:
type="button" id="agree-btn" data-cid="cid; ?>" data-url="permalink(); ?>">
赞
注意文章按钮有两个自定义属性,data-cid 存储文章的 cid,JS 发送 AJAX 请求的时候会用到,data-url 文章的 URL,发送 AJAX 请求的 URL。
上面如果文章被点赞过 PHP 就会输出 disabled 来禁用按钮。
JavaScript 点赞
我这里用到了 jQuery,下面是点赞代码:
// 点赞按钮点击
$("#agree-btn").on("click", function () {
$("#agree-btn").get(0).disabled = true; // 禁用点赞按钮
// 发送 AJAX 请求
$.ajax({
// 请求方式 post
type: "post",
// url 获取点赞按钮的自定义 url 属性
url: $("#agree-btn").attr("data-url"),
// 发送的数据 cid,直接获取点赞按钮的 cid 属性
data: "agree=" + $("#agree-btn").attr("data-cid"),
async: true,
timeout: 30000,
cache: false,
// 请求成功的函数
success: function (data) {
var re = /d/; // 匹配数字的正则表达式
// 匹配数字
if (re.test(data)) {
// 把点赞按钮中的点赞数量设置为传回的点赞数量
$("#agree-btn .agree-num").html(data);
}
},
error: function () {
// 如果请求出错就恢复点赞按钮
$("#agree-btn").get(0).disabled = false;
},
});
});
点赞后被点赞的文章的点赞按钮会被禁用,只有点赞记录的 Cookie 到期或清除后才能再次点赞。
以上就是 Typecho 点赞功能的代码和详细说明,上面的函数和代码放到其它主题中也能使用,JS 部分需要依赖 jQuery。
标签:
相关推荐:
最新新闻:
- 全球关注:Rancher和KubeSphere哪个更友好?Rancher和KubeSphere的对比介绍
- 如何兑现你的客户价值?商业模式设计三步曲
- 全球聚焦:飞信公众平台密码怎么修改?电脑版密码修改教程
- 淘宝刷单怎么做?淘宝刷单技巧|天天速看
- 手机hd怎么关闭?关闭魅族手机Flyme7.1系统教程
- 百度工具栏如何设置热门推荐网站?热门推荐网站设置
- 焦点信息:你的无线网络被蹭网了吗?怎么防止别人蹭网?
- 液晶电视机使用的高清线是什么?HDMI1.4版禁止使用版本号标识方法-天天最新
- 天天观天下!无线网络中的ac控制器怎么设置?设置步骤介绍
- Homebrew是什么?软件包管理工具Homebrew的安装与使用-全球信息
- 传智播客和黑马程序员到底有什么关系?详情介绍:世界热资讯
- 全球观热点:CRC校验原理是什么?如何校验?CRC校验原理与步骤
- 世界快看:什么是ASP?一文带你揭开ASP神秘面纱
- 当前快报:为什么说“鲶鱼效应”是一种负激励?鲶鱼效应详情
- 【数据库学习】数据库平台:postgresql安装配置与常见命令
- Stripe注册流程是什么?Stripe国际支付简介及API对接
- 环球短讯!typecho打造点赞功能(案例教程)
- 每日速讯:移动短信内容查询方法有哪些?移动短信内容查询方法
- 【世界报资讯】三星r25好不好?三星R25笔记本评测
- 世界通讯!【中文版】Dev-C++的安装与使用
- 如何设置一个守护线程?守护线程与普通线程的区别是什么?
- 环球最新:【安装教程】Abaqus2016(64bit)安装步骤
- 微软的共享源码公共语言基础——mono|焦点热闻
- 环球热讯:D-H法:拉伸机上下料机械手的运动学模型
- String.format的用法(字符串格式化)|快报
- commit中文含义是什么?mitcommit的音标和读音及用法:全球热讯
- 微信号怎么注册?微信使用方法有哪些?
- 当前焦点!第一张报表效果展示图:FineReport-leanning
- 苹果妙控鼠标2如何使用?使用方法大全
- 三星q40配置怎么样?三星q40评测及报价|世界报道
- 环球快看点丨相机内存卡坏了怎么办?用计算机自检程序进行数据恢复
- 3D打印火箭第二次发射失败_全球快看点
- 世界资讯:oki/5330c.html,oki5330scXP驱动怎么安装?打打印机驱动安装
- 什么是APM?什么是应用程序性能管理(APM)? 世界热头条
- 环球短讯!网络监控系统简介、流程及架构和方案设计
- 《POPPIN滑步基本教学》单臂关节逆向传递手法
- 环球通讯!多屏方便 桌面显示器支架89元
- 网页设计的价格标准是什么?网页设计的标准收费介绍
- tp login.cn登陆入口进不去怎么办?新版TP-Link路由器管理页面地址是什么?
- 休闲骑游必备 喜德盛平把公路1599元:今日热搜
- 要闻速递:VR视频播放器怎么使用?VR视频播放器使用教程
- 有线路由器和无线路由器有什么区别?哪个更实用?
- 实时:中国商用车联网市场迎来新一轮爆发期 行业痛点仍待解决
- 如何玩转苹果手机?iPhone手机使用技巧|全球今亮点
- 如何直接调用accesstoken?timestap参数构造方法
- 如何开发一个好用的app?浅谈智能手机app开发
- 【聚看点】入手立省80元!储侠1TB固态仅需269元
- 全球今日讯!通用汽车开发ChatGPT一样的行驶助理
- 天天热门:《杀手4》开发有点停滞 IO互动当前重心是007游戏
- EA或将公布一个新的竞速游戏
- 前沿资讯!就看iPhone 15了?苹果市值或将再次站上3万亿美元
- 每日热点:带领四百万人逃离大城市的“北欧李子柒”
- 《巫师3》更新即将上线 PC端大约2GB
- 国产CPU旗舰笔记本发布:3.3GHz 性能提升4倍|环球关注
- 《流浪地球》系列电影连映:69元起
- 吉利汽车购置税减半限时 最高补3万元-天天最新
- 绝对值,小喆全铝海景房机箱仅需 169 元
- 环球新动态:绝对值,京东京造 JDBook Pro 14寸商务本仅售 1699 元
- 传索尼已于去年10月收购CDPR 外媒:可信度不高!
- 哈尔滨“冰雪文化之都”建设谋突破
- ROG冰刃7双屏游戏本上架 起售价29999元
- 郁郁葱葱!Xbox无线手柄“青森绿”开箱图赏
- 分析师:微软收购动视暴雪会伤害索尼 但不会影响玩家:最新
- 3USB充电口!米家智能魔方插排低至49元
- 全球微资讯!小米13 Ultra确定4月初发布 5月海外开售
- 森歌不锈钢定制家居,畅想自定义人生
- 锐龙 9 7945HX 发布,16 核心,比 i9-13950HX 快 10%
- 环球报道:因传感器问题,iPhone 17 Pro 才有屏下 Face ID
- 玩家在《生化危机8:村庄》VR版里戏耍夫人:打完就跑-全球新视野
- 恐怖游戏《无尽轮回》新实机演示:逃离一战无尽梦魇
- 《游灵》正式版现已登陆PC与主机平台,Steam购买更享8折优惠
- 平台解谜游戏《逃离梦境》今日登陆Steam-动态焦点
- 27英寸显示器抄底价!仅需699元HKC显示器带回家
- 今亮点!跌穿了!英特尔A380显卡仅799元
- 每日速读!苹果大招在 2026 年,iPhone18 Pro上将实现真全面屏