收藏表结构
| 字段 | 含义 |
| --- | --- |
| id | 主键 |
| user_id | 用户id |
| title| 收藏内容的标题 |
| url | 收藏内容的原文地址,不带域名 |
| description | 收藏内容的描述 |
| table_name | 收藏实体以前所在表不带前缀 |
| object_id | 收藏内容里原来的主键id |
| create_time | 收藏时间 |
加入数据后如图所示:
![](https://box.kancloud.cn/252413563974d66266ec1d79e707f74d_1119x79.png)
前端代码:
~~~
<a href="{:url('user/favorite/add')}"
class="js-favorite-btn"
data-title="{:base64_encode($article.post_title)}"
data-url="{:cmf_url_encode('portal/Article/index',array('id'=>$article['id']))}"
data-table="portal_post"
data-id="{$article['id']}"
>
<i class="fa fa-star-o"></i>
</a>
~~~
推送到后台其实是由js完成的
js代码如下
public\static\js\frontend.js
~~~
var $js_favorite_btn = $('a.js-favorite-btn');
if ($js_favorite_btn.length) {
Wind.use('noty', function () {
$js_favorite_btn.on('click', function (e) {
e.preventDefault();
var $this = $(this),
href = $this.prop('href'),
url = $this.data("url"),
id = $this.data("id"),
table = $this.data('table'),
title = $this.data("title"),
description = $this.data("description");
$.post(href, {
id: id,
table: table,
url: url,
title: title,
description: description
}, function (data) {
if (data.code == 1) {
if (data.msg) {
noty({
text: data.msg,
type: 'success',
layout: 'center',
callback: {
afterClose: function () {
if (data.url) {
location.href = data.url;
}
}
}
});
}
} else if (data.code == 0) {
noty({
text: data.msg,
type: 'error',
layout: 'center',
callback: {
afterClose: function () {
if (data.url) {
location.href = data.url;
}
}
}
});
}
}, "json");
});
});
}
~~~
逻辑很清晰,阻止按钮默认动作,ajax传输数据,成功后重载页面
* * * * *
后台逻辑主要集中在
\app\user\controller\FavoriteController.php
\app\user\model\UserFavoriteModel.php
这两个文件
* * * * *
分析
一个用户可以收藏多篇文章
一篇文章可以被多个用户收藏
我们的数据表中因为多了诸如 description title url这样的字段,对于某一用户的收藏文章,就可以用
~~~
$userQuery = Db::name("UserFavorite");
$favorites = $userQuery->where(['user_id' => $userId])->order('id desc')->paginate(10);
~~~
来查询并列出表格,这样节省了再次查询文章表所需要的sql
- php套路
- 套路之类结构
- thinkphp分块解析之Collection
- thinkphp基础之collection
- Collection在thinkphp中的运用
- thinkcmf模块分析
- Controller按界面点击顺序排列表
- user模块-Controller分析
- portal模块-Controller分析
- admin模块-Controller分析
- user模块-脑图
- portal模块-脑图
- admin模块-脑图
- cmf公共函数解析-common.php
- thinkcmf点滴记录
- 自定义标签详解
- 插件
- 系统信息插件
- 插件演示插件
- 留言板插件
- 留言板1 建立胚胎
- 留言板1-1 数据库变化
- 留言板1-2 自定义钩子
- 留言板2 连接数据库
- 留言板3 读取后台界面数据
- 留言板4 前端模板
- 留言板5 分离cssjs文件
- 留言板6 验证
- 留言板7 图形验证码
- 留言板8 后台留言列表页
- 留言板9 后记
- 评论插件
- 1 分析数据表
- 2 CommentModel.php
- 3 UserModel.php
- 4 DCommentPlugin.php
- 前端调用代码
- 喜欢插件
- 1 分析
- 2 收藏功能
- 3 插件建模
- 4 数据库设计
- 5 插入一条数据
- 多语言
- thinkphp多语言
- thinkcmf多语言