TaoLer/app/index/controller/Article.php

304 lines
9.3 KiB
PHP
Raw Normal View History

2020-01-01 13:17:19 +08:00
<?php
namespace app\index\controller;
use app\common\controller\BaseController;
use think\facade\View;
use think\facade\Request;
use think\facade\Db;
2020-03-11 11:33:17 +08:00
use think\facade\Cache;
2020-01-01 13:17:19 +08:00
use app\common\model\Cate;
use app\common\model\User;
use app\common\model\Comment;
use app\common\model\Collection;
use app\common\model\Article as ArticleModel;
use think\exception\ValidateException;
use think\facade\Config;
class Article extends BaseController
{
protected $middleware = [
'logincheck' => ['except' => ['cate','detail'] ],
];
//文章分类
public function cate(){
$where =[];
//获取分类ID
$ename = Request::param('ename');
2020-03-13 22:59:38 +08:00
$type = Request::param('type');
2020-01-01 13:17:19 +08:00
$cate = Db::name('cate')->where('ename',$ename)->find();
2020-03-13 22:59:38 +08:00
2020-01-01 13:17:19 +08:00
if($cate){
$where = ['cate_id' => $cate['id']];
}
2020-03-13 22:59:38 +08:00
$artList = Cache::get('arts'.$cate['id'].$type);
if(!$artList){
switch ($type) {
2020-01-15 11:45:41 +08:00
//查询文章,15个分1页
2020-01-01 13:17:19 +08:00
case 'all':
2020-01-15 11:45:41 +08:00
$artList = ArticleModel::field('id,title,cate_id,user_id,create_time,is_top,is_hot')->with([
2020-01-08 17:37:41 +08:00
'cate' => function($query){
$query->where('delete_time',0)->field('id,catename');
},
'user' => function($query){
$query->field('id,name,nickname,user_img,area_id');
}
])->withCount(['comments'])->where('status',1)->where($where)->order(['is_top'=>'desc','create_time'=>'desc'])->paginate(15);
2020-01-01 13:17:19 +08:00
break;
case 'hot':
2020-01-15 11:45:41 +08:00
$artList = ArticleModel::field('id,title,cate_id,user_id,create_time,is_top,is_hot')->with([
2020-01-08 17:37:41 +08:00
'cate' => function($query){
$query->where('delete_time',0)->field('id,catename');
},
'user' => function($query){
$query->field('id,name,nickname,user_img,area_id');
}
])->withCount(['comments'])->where('status',1)->where($where)->where('is_hot',1)->order(['is_top'=>'desc','create_time'=>'desc'])->paginate(15);
2020-01-01 13:17:19 +08:00
break;
case 'top':
2020-01-15 11:45:41 +08:00
$artList = ArticleModel::field('id,title,cate_id,user_id,create_time,is_top,is_hot')->with([
2020-01-08 17:37:41 +08:00
'cate' => function($query){
$query->where('delete_time',0)->field('id,catename');
},
'user' => function($query){
$query->field('id,name,nickname,user_img,area_id');
}
])->withCount(['comments'])->where('status',1)->where($where)->where('is_top',1)->order(['is_top'=>'desc','create_time'=>'desc'])->paginate(15);
2020-01-01 13:17:19 +08:00
break;
default:
2020-01-15 11:45:41 +08:00
$artList = ArticleModel::field('id,title,cate_id,user_id,create_time,is_top,is_hot')->with([
2020-01-08 17:37:41 +08:00
'cate' => function($query){
$query->where('delete_time',0)->field('id,catename');
},
'user' => function($query){
$query->field('id,name,nickname,user_img,area_id');
}
])->withCount(['comments'])->where('status',1)->where($where)->order(['is_top'=>'desc','create_time'=>'desc'])->withCache(30)->paginate(15);
2020-01-01 13:17:19 +08:00
break;
2020-03-13 22:59:38 +08:00
}
Cache::set('arts'.$cate['id'].$type,$artList,600);
2020-01-01 13:17:19 +08:00
}
2020-03-13 22:59:38 +08:00
2020-01-01 13:17:19 +08:00
// 热议文章
2020-01-08 17:37:41 +08:00
$artHot = ArticleModel::field('id,title')->withCount('comments')->where('status',1)->whereTime('create_time', 'year')->order('comments_count','desc')->limit(10)->select();
2020-01-01 13:17:19 +08:00
//分类右栏广告
2020-01-02 16:23:03 +08:00
$ad_cate = Db::name('slider')->where('slid_status',1)->where('delete_time',0)->where('slid_type',5)->whereTime('slid_over','>=',time())->select();
2020-01-01 13:17:19 +08:00
//通用右栏
2020-01-02 16:23:03 +08:00
$ad_comm = Db::name('slider')->where('slid_status',1)->where('delete_time',0)->where('slid_type',2)->whereTime('slid_over','>=',time())->select();
2020-01-01 13:17:19 +08:00
2020-03-13 22:59:38 +08:00
View::assign(['type'=>$type,'artList'=>$artList,'artHot'=>$artHot,'ad_cate'=>$ad_cate,'ad_comm'=>$ad_comm]);
2020-01-01 13:17:19 +08:00
return View::fetch();
}
//文章详情页
2020-02-12 15:08:52 +08:00
public function detail($id)
2020-01-01 13:17:19 +08:00
{
2020-03-11 21:57:59 +08:00
$article = Cache::get('article_'.$id);
2020-03-11 11:33:17 +08:00
if(!$article){
//查询文章
2020-02-19 14:59:09 +08:00
$article = ArticleModel::field('id,title,content,status,cate_id,user_id,is_top,is_hot,is_reply,pv,jie,tags,create_time')->where('status',1)->with([
2020-01-08 17:37:41 +08:00
'cate' => function($query){
$query->where('delete_time',0)->field('id,catename');
},
'user' => function($query){
$query->field('id,name,nickname,user_img,area_id');
}
2020-02-12 15:08:52 +08:00
])->find($id);
2020-03-11 21:57:59 +08:00
Cache::set('article_'.$id,$article,3600);
2020-03-11 11:33:17 +08:00
}
2020-02-12 15:08:52 +08:00
$comments = $article->comments()->where('status',1)->select();
2020-01-01 13:17:19 +08:00
$article->inc('pv')->update();
2020-03-13 22:59:38 +08:00
$pv = Db::name('article')->field('pv')->where('id',$id)->value('pv');
2020-01-01 13:17:19 +08:00
/*
$nt = time();
$ft = $article->comments;
$ct[] = [];
foreach($ft as $c){
$t = $c->create_time;
$ct[] = intval(($nt - strtotime($t))/86400);
}
dump($nt);
dump($ct);
$this->assign('ct',$ct);
$article->append(['comment.ct'])->toArray();
//halt($article);
*/
// 热议文章
2020-01-08 17:37:41 +08:00
$artHot = ArticleModel::field('id,title')->withCount('comments')->where('status',1)->whereTime('create_time', 'year')->order('comments_count','desc')->limit(10)->select();
2020-01-01 13:17:19 +08:00
//文章广告
2020-01-02 16:23:03 +08:00
$ad_article = Db::name('slider')->where('slid_status',1)->where('delete_time',0)->where('slid_type',4)->whereTime('slid_over','>=',time())->select();
2020-01-01 13:17:19 +08:00
//通用右栏
2020-01-02 16:23:03 +08:00
$ad_comm = Db::name('slider')->where('slid_status',1)->where('delete_time',0)->where('slid_type',2)->whereTime('slid_over','>=',time())->select();
2020-02-19 14:59:09 +08:00
2020-03-13 22:59:38 +08:00
View::assign(['article'=>$article,'pv'=>$pv,'comments'=>$comments,'artHot'=>$artHot,'ad_art'=>$ad_article,'ad_comm'=>$ad_comm]);
2020-01-01 13:17:19 +08:00
return View::fetch();
}
//文章评论
public function comment()
{
//if (Request::isAjax()){
//获取评论
$data = Request::only(['content','article_id','user_id']);
//用户留言存入数据库
if (Comment::create($data)) {
$res = ['code'=>1, 'msg'=>'留言成功'];
} else{
$res = ['code'=>0, 'msg'=>'留言失败'];
}
return json($res);
}
//添加文章
public function add()
{
if(Request::isAjax()){
2020-02-19 14:59:09 +08:00
$data = Request::only(['cate_id','title','user_id','content','upzip','tags','captcha']);
2020-01-01 13:17:19 +08:00
$validate = new \app\common\validate\Article; //调用验证器
$result = $validate->scene('Artadd')->check($data); //进行数据验证
if(true !==$result){
return $this->error($validate->getError());
} else {
2020-02-19 14:59:09 +08:00
$article = new \app\common\model\Article();
2020-01-01 13:17:19 +08:00
$result = $article->add($data);
if($result == 1) {
$aid = Db::name('article')->max('id');
return json(['code'=>1,'msg'=>'发布成功','url'=>'/'.app('http')->getName().'/jie/'.$aid.'.html']);
} else {
$this->error($result);
}
}
}
return View::fetch();
}
2020-02-17 16:35:51 +08:00
2020-02-17 17:56:05 +08:00
//添加tag
2020-02-19 14:59:09 +08:00
public function tags()
{
2020-02-17 16:35:51 +08:00
$data = Request::only(['tags']);
$att = explode(',',$data['tags']);
$tags = [];
foreach($att as $v){
if ($v !='') {
2020-02-19 14:59:09 +08:00
$tags[] = $v;
2020-02-17 16:35:51 +08:00
}
}
return json(['code'=>0,'data'=>$tags]);
}
2020-01-01 13:17:19 +08:00
//编辑文章
2020-02-19 14:59:09 +08:00
public function edit($id)
2020-01-01 13:17:19 +08:00
{
2020-02-19 14:59:09 +08:00
$article = Db::name('article')->find($id);
2020-01-01 13:17:19 +08:00
if(Request::isAjax()){
2020-02-19 14:59:09 +08:00
$data = Request::only(['id','cate_id','title','user_id','content','upzip','tags','captcha']);
2020-01-01 13:17:19 +08:00
$validate = new \app\common\validate\Article(); //调用验证器
$res = $validate->scene('Artadd')->check($data); //进行数据验证
2020-02-25 15:40:06 +08:00
if(true !==$res){
2020-01-01 13:17:19 +08:00
return $this->error($validate->getError());
} else {
2020-01-08 17:37:41 +08:00
$article = new \app\common\model\Article();
2020-01-01 13:17:19 +08:00
$result = $article->edit($data);
if($result == 1) {
2020-02-19 14:59:09 +08:00
return json(['code'=>1,'msg'=>'修改成功','url'=>'/'.app('http')->getName().'/jie/'.$id.'.html']);
2020-01-01 13:17:19 +08:00
} else {
$this->error($result);
}
}
}
2020-02-19 14:59:09 +08:00
$tag = Db::name('article')->where('id',$id)->value('tags');
$attr = explode(',',$tag);
$tags = [];
foreach($attr as $key=>$v){
if ($v !='') {
$tags[] = $v;
}
}
View::assign(['article'=>$article,'tags'=>$tags]);
2020-01-01 13:17:19 +08:00
return View::fetch();
}
//删除文章
public function delete()
{
$article = ArticleModel::find(input('id'));
$result = $article->together(['comments'])->delete();
if($result) {
$res = ['code'=>1,'msg'=>'删除文章成功','url'=>'/index/user/post'];
} else {
$res = ['code'=>0,'msg'=>'删除文章失败'];
}
return json($res);
}
//文本编辑器图片上传
public function text_img_upload()
{
$file = request()->file('file');
try {
2020-01-11 17:27:15 +08:00
validate(['file'=>'fileSize:2048|fileExt:jpg,png,gif'])
2020-02-25 15:40:06 +08:00
->check(['file'=>$file]);
2020-01-01 13:17:19 +08:00
$savename = \think\facade\Filesystem::disk('public')->putFile('article_pic',$file);
2020-01-11 17:27:15 +08:00
} catch (ValidateException $e) {
2020-01-01 13:17:19 +08:00
echo $e->getMessage();
}
$upload = Config::get('filesystem.disks.public.url');
if($savename){
//$name = $file->hashName();
$name_path =str_replace('\\',"/",$upload.'/'.$savename);
//halt($name_path);
//$image = \think\Image::open("uploads/$name_path");
//$image->thumb(168, 168)->save("uploads/$name_path");
$res = ['status'=>0,'msg'=>'上传成功','url'=> $name_path];
}else{
2020-02-25 12:22:00 +08:00
$res = ['status'=>-1,'msg'=>'上传错误'];
2020-01-01 13:17:19 +08:00
}
return json($res);
}
//文章置顶,状态
public function jieset(){
$data = Request::param();
2020-02-25 15:40:06 +08:00
$article = ArticleModel::field('id,is_top,is_hot')->find($data['id']);
2020-01-01 13:17:19 +08:00
if($data['field'] === 'top') {
if($data['rank']==1){
$article->save(['is_top' => 1]);
2020-02-25 15:40:06 +08:00
$res = ['status'=>0,'msg'=>'置顶成功'];
2020-01-01 13:17:19 +08:00
} else {
$article->save(['is_top' => 0]);
2020-02-25 15:40:06 +08:00
$res = ['status'=>0,'msg'=>'已取消置顶'];
2020-01-01 13:17:19 +08:00
}
} else {
if($data['rank']==1){
$article->save(['is_hot' => 1]);
2020-02-25 15:40:06 +08:00
$res = ['status'=>0,'msg'=>'已设精贴'];
2020-01-01 13:17:19 +08:00
} else {
$article->save(['is_hot' => 0]);
2020-02-25 15:40:06 +08:00
$res = ['status'=>0,'msg'=>'精贴已取消'];
2020-01-01 13:17:19 +08:00
}
}
return json($res);
}
}