【thinkphp5】【THINKCMG】标签部分开发(一)
2018-06-22 04:57:30来源:未知 阅读 ()
最近打算开一个自己的CMS后台轮子,框架选择了thinkphp 5 (别问我为什么选择这个框架)然后想边开发边记录一下,方便自己方便他人
进入正题
1.数据库设计
一共三张表
post文章表这个就不贴了(在这里没有使用到)
主要是以下两张
一张是存储标签的tag表,
另一张是关系表用于关联标签与文章
2.代码部分
主要我们使用到了thinkphp5的多对多关联(想详细了解的可以看这里 多对多关联)
文章表对应的模型
model/Posts.php
<?php namespace app\admin\model; use think\Model; class Posts extends Model { protected function initialize() { parent::initialize(); } public function tag() { return $this->belongsToMany('Tags', 'tag_relationships'); } }
主要是tag这个函数通过belangsTomany把文章表与标签和关系表做个关联
因为我们还要做到标签找到相关文章我们还得给标签模型加个关联
标签表对应模型
model/Tags.php
<?php namespace app\admin\model; use think\Model; class Tags extends Model { protected function initialize() { parent::initialize(); } public function post() { return $this->belongsToMany('Posts', 'tag_relationships'); } }
一样的道理不在叙述
下面开始控制器部分
先写新发表文章的标签部分
controller/Post.php
public function doadd(Request $request) { <span style="white-space:pre"> </span>//文章部分不再贴出,但需要先进行写入然后返回文章uid $result = $request->param(); $re_tags = explode(',', $result['tags']); // 标签写入 for ($i=0; $i <count($re_tags); $i++) { $data[]=['name'=>$re_tags[$i]]; } $post = PostAdminModel::get($uid); $post->tag()->saveAll($data); }
说明
$result //post数组
$uid //文章储存完后返回来的主键uid
因为前端标签插件发送的数据格式是通过逗号分隔,所以我们接收到数据后转换为['key'=>'value'](在代码中name是我标签表中标签名字对应的键值名)方便接下来的操作
接下来就是通过Post模型静态调用get方法(默认输入为主键)
然后通过批量增加关联数据操作把刚才我们组合的标签数组传进来
这样新增就完成了
接下来我们开始写编辑页的标签操作
在这里我们先分析一下我们的标签可能的操作
1.删除标签但不删除标签库中的
2.新增标签但是不存在于标签表中
3.新增标签但是存在于标签表中
4.取出全部标签
public function edit($uid) { if (Request::instance()->isPost()) { $request = Request::instance(); $result = $request->param(); //标签 Start $re_tags = $result['tags']; $taglist = explode(',',$re_tags); $post = PostAdminModel::get($uid); foreach($post->tag as $value) { $orglist[] = $value['name']; } //删除标签 <pre name="code" class="php"> //文章的关联标签与前端传递过来的标签进行对比(顺序不能错了)如果存在值则进行删除操作 $dellist=array_diff($orglist,$taglist); if($dellist) { foreach($dellist as $value) //删除关联操作 $tag = TagsAdminModel::getByName($value); $post->tag()->detach($tag); } //增加标签 //与之前的比较相反即增加操作 $addlist=array_diff($taglist,$orglist); if($addlist) { foreach($addlist as $value) { <span style="white-space:pre"> </span> //标签存在于标签库中则只增加关联,不存在则新增 $tagresult= TagsAdminModel::getByName($value); if($tagresult) { $tagid = $tagresult->value('id'); $post->tag()->attach($tagid); }else{ $post->tag()->save(['name'=>$value]); } } } //标签 End } } //渲染获取文章数据 //因为我们进行了关联所以可以直接通过查询文章表并获取到标签集 $request=PostAdminModel::get($uid); $tags=""; for ($i=0; $i <count($request->tag); $i++) { $tags .= $request->tag[$i]['name'].','; } $this->assign('tags', $tags); return $this->fetch(); }
改说的都写在注释里了
其实关于后台的标签操作还有就是单独对于标签的操作
这个就相对简单了直接操作标签的增加删除修改即可
但是在删除的时候一定要注意先进行关联删除再进行标签的删除
前端显示就是文章本身的标签显示这个也简单
还有就是标签反查文章基本方法我在上面都写了
可以按照需求进行修改即可
不出意外我后续还会续上
写的可能很啰嗦很乱 大家凑活看吧~
有问题可以留言问
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- php不写闭合标签的好处 2020-02-24
- thinkPHP5项目中实现QQ第三方登录功能 2020-02-19
- thinkPHP5分页功能实现方法分析 2020-02-08
- thinkPHP5实现数据库添加内容的方法 2019-12-19
- deducmsV5.7 在{dede:datalist}标签中runphp无效的解决办法 2019-07-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash