ZBlogPHP是一款开源的博客程序,为方便用户阅读和分享,本教程将教您如何为其添加文章收藏功能,您需要安装并配置好ZBlogPHP框架,在前端页面中设计一个收藏按钮,并通过JavaScript实现点击后存储文章ID到浏览器的本地存储,之后,编写后端PHP代码以验证用户身份并检查收藏状态,如已收藏则提示用户并更新收藏计数,未收藏则将其添加至数据库并更新收藏计数,完成这些步骤后,您的ZBlogPHP博客文章收藏功能即可顺利实现。
在数字化时代,人们越来越依赖于网络信息,博客作为一种流行的网络交流方式,其内容积累和传播显得尤为重要,为了方便读者快速找到感兴趣的内容,许多博主选择为其博客添加收藏功能,在使用 ZBlogPHP 框架的博客中如何实现这一功能呢?本文将为您详细讲解。
准备工作
-
确保您已正确安装并配置了 ZBlogPHP。
-
熟悉 ZBlogPHP 的目录结构和文件格式。
-
了解 ZBlogPHP 的模板和插件系统,以便后续开发。
实现步骤
数据库设计
我们需要在数据库中添加一个新的数据表来存储文章收藏信息,创建一个名为 zblog_favorites 的数据表,其中包含以下字段:
id: 主键,自增长user_id: 用户ID,用于关联用户收藏的文章post_id: 文章ID,用于关联被收藏的文章created_at: 收藏时间,默认当前时间
CREATE TABLE `zblog_favorites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `post_id` int(11) NOT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建控制器
在 ZBlogPHP 中,控制器负责处理用户请求并调用相应的模型执行操作,我们需要创建一个名为 FavoritesController 的控制器来处理收藏和取消收藏的请求。
在 application/controller 目录下创建 FavoritesController.class.php 文件,并添加以下代码:
<?php
namespace app\controller;
use Z-blog\api\model\UserModel;
use Z-blog\api\model\PostModel;
use Z-blog\requestRequest;
use Z-blog.util\RequestUtil;
class FavoritesController {
public function collect(PostModel $postModel, UserModel $userModel, RequestUtil $requestUtil) {
$user_id = $requestUtil->getUint('user_id');
$post_id = $requestUtil->getUint('post_id');
// 检查是否已经收藏过该文章
$result = $userModel->isFavorite($user_id, $post_id);
if ($result === true) {
// 取消收藏
$userModel->removeFavorite($user_id, $post_id);
} else {
// 收藏文章
$userModel->addFavorite($user_id, $post_id);
}
return 'success';
}
}
创建视图
在 application/view 目录下为收藏按钮创建一个单独的视图文件,favorite.php,在该文件中,使用 HTML 和 PHP 代码来渲染收藏按钮,并为其添加点击事件监听器。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">收藏文章</title>
</head>
<body>
<?php
// 获取当前登录用户的 ID
$user_id =为用户模型获取用户ID;
?>
<button id="favoriteBtn<?php echo $post_id; ?>" class="favorite-btn <?php echo ($userModel->isFavorite($user_id, $post_id)) ? 'liked' : ''; ?>">
收藏
</button>
<script>
// 获取按钮元素
const favoriteBtn = document.getElementById('favoriteBtn<?php echo $post_id; ?>');
// 绑定点击事件
favoriteBtn.addEventListener('click', function() {
// 获取当前用户 ID 和文章 ID
const userId = <?php echo json_encode($user_id); ?>;
const postId = <?php echo json_encode($post_id); ?>;
// 发送收藏请求
fetch('/api/favorites/collect', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: `user_id=${userId}&post_id=${postId}`
}).then(response => response.text()).then(data => {
if (data === 'success') {
// 改变按钮样式表示已收藏
favoriteBtn.textContent = '已收藏';
favoriteBtn.classList.add('liked');
}
});
});
</script>
</body>
</html>
编写路由
需要在 route.php 文件中为新功能编写路由规则,将以下代码添加到文件末尾:
use app\controller\FavoritesController;
// 添加收藏功能路由
Route::post('favorites/collect/:user_id/:post_id', [FavoritesController::class, 'collect'])
->pattern(['user_id' => '\d+', 'post_id' => '\d+']);
当读者点击收藏按钮时,会将文章添加到他们的收藏列表中,取消收藏的功能可以通过类似的视图文件和控制器逻辑来实现。
通过以上步骤,我们已经在 ZBlogPHP 框架中成功实现了文章收藏功能,这将为博主和读者提供一个更加便捷的交流平台,在实际开发中,还可以进一步优化和完善此功能,例如实现批量收藏、分享到社交平台等功能。
希望本文能帮助您更好地了解和使用 ZBlogPHP 的文章收藏功能,如有任何疑问或建议,请随时与我们联系。