user post player

This commit is contained in:
taoser 2021-05-24 15:05:30 +08:00
parent 4988394f0d
commit c3822f1455
13 changed files with 1887 additions and 342 deletions

View File

@ -37,6 +37,12 @@ class Article extends Model
return $this->hasMany(Comment::class);
}
//文章关联收藏
public function collection()
{
return $this->hasMany(Collection::class);
}
//文章关联用户
public function user()
{

View File

@ -19,7 +19,7 @@ class Collection extends Model
//收藏关联文章
public function article()
{
return $this->belongsTo('Article','article_id','id');
return $this->belongsTo(Article::class);
}
}

View File

@ -25,47 +25,85 @@ class User extends BaseController
//用户中心
public function index()
{
$user['user_id'] = Session::get('user_id');
$username = session::get('user_name');
return view();
}
//发帖list
public function artList()
{
$article = Article::withCount('comments')->where('user_id',$this->uid)->order('update_time','desc')->paginate(10);
//var_dump($article);
$count = $article->total();
$res = [];
if($count){
$res['code'] = 0;
$res['count'] = $count;
foreach($article as $v){
$res['data'][] = ['id'=>$v['id'],
'title' => $v['title'],
'url' => (string) url('article/detail',['id'=>$v['id']]),
'status' => $v['status'] ? '正常':'待审核',
'ctime' => $v['create_time'],
'datas' => $v['pv'].'阅/'.$v['comments_count'].'答'
];
}
} else {
return json(['code'=>-1,'msg'=>'无数据']);
}
return json($res);
}
//收藏list
public function collList(){
//收藏的帖子
$collect = Collection::with(['article'=>function($query){
$query->withCount('comments')->where('status',1);
}])->where('user_id',$this->uid)->order('create_time','desc')->paginate(10);
$count =$collect->total();
$res = [];
if($count){
$res['code'] = 0;
$res['count'] = $count ;
foreach($collect as $v){
$res['data'][] = [
'id' =>$v['id'],
'title' => isset($v->article->title) ? '已失效' : $v->article->title,
'url' => (string) url('article/detail',['id'=>$v['article_id']]),
'auther' => $v->article->user->name,
'ctime'=> $v['create_time'],
'comment' =>$v->article->comments_count,
];
}
} else {
return json(['code'=>-1,'msg'=>'无数据']);
}
return json($res);
}
//文章管理
public function post()
{
//发表的帖子
$user['user_id'] = session::get('user_id');
$username = session::get('user_name');
$article = Article::withCount('comments')->where('user_id',$user['user_id'])->order('update_time','desc')->paginate([
'list_rows'=>10,
'page',
'path' => 'post',
'fragment' => 'index',
'var_page' => 'page',
]);
$page = $article->render();
View::assign(['article'=>$article,'page'=>$page]);
//收藏的帖子
$collect = Collection::with('article')->where('user_id',$user['user_id'])->order('create_time','desc')->paginate(10);
$count =$collect->total();
View::assign(['collect'=>$collect,'count'=>$count]);
return View::fetch();
}
//取消文章收藏
public function colltDel()
{
$collt = Collection::where('article_id',input('id'))->where('user_id',session::get('user_id'))->find();
$result = $collt->delete();
if($result){
$this->success('取消成功');
} else {
$this->error('取消失败了');
if(Request::isAjax()){
$collt = Collection::where('user_id',$this->uid)->find(input('id'));
$result = $collt->delete();
if($result){
$res = ['code'=>0,'msg'=>'取消成功'];
} else {
$res = ['code'=>0,'msg'=>'取消失败'];
}
return json($res);
}
}
@ -154,7 +192,7 @@ class User extends BaseController
//用户回答
$reys = Db::name('comment')->alias('c')->join('article a','c.article_id = a.id')->field('a.id,a.title,c.content,c.create_time,c.delete_time')->where(['a.delete_time'=>0,'c.delete_time'=>0])->where('c.user_id',$id)->order(['c.create_time'=>'desc'])->cache(3600)->select();
View::assign(['u'=>$u,'arts'=>$arts,'reys'=>$reys]);
View::assign(['u'=>$u,'arts'=>$arts,'reys'=>$reys,'jspage'=>'']);
return View::fetch();
}

View File

@ -56,10 +56,10 @@ return [
'finished' => '已结',
'end' => '已结',
'no finished' => '未结',
'hot' => '精',
'top' => '顶',
'cancel hoting' => '取加精',
'cancel topping' => '取置顶',
'hot' => '精',
'top' => '顶',
'cancel hoting' => '取加精',
'cancel topping' => '取置顶',
'go sign' => '去签到',
'more post' => '更多帖子',
'friendly link' => '友情链接',

View File

@ -926,11 +926,7 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util'], function(
fly.layEditor({
elem: '.fly-editor'
});
//加载播放器
layui.use('plyr', function(plyr){
plyr.setup();
});
//手机设备的简单适配
var treeMobile = $('.site-tree-mobile')
,shadeMobile = $('.site-mobile-shade')

File diff suppressed because one or more lines are too long

View File

@ -16,6 +16,7 @@ layui.define(['laypage', 'fly', 'element', 'flow'], function(exports){
var flow = layui.flow;
var element = layui.element;
var upload = layui.upload;
var table = layui.table;
var gather = {}, dom = {
mine: $('#LAY_mine')
@ -26,115 +27,109 @@ layui.define(['laypage', 'fly', 'element', 'flow'], function(exports){
//我的相关数据
//发贴list
var post = table.render({
elem: '#art-post'
,url: artListUrl //进列表接口
,title: ''
,cols: [[
{type: 'numbers', fixed: 'left'}
,{field: 'title', title: '标题',minWidth: 250 ,templet: '<div><a href="{{d.url}}">{{d.title}}</a></div>'}
,{field: 'status', title: '状态', Width: 80}
,{field: 'ctime', title: '时间', width: 120}
,{field: 'datas', title: '数据', width: 120}
,{title: '操作', width: 150, align: 'center', toolbar: '#artTool'}
]]
,text: '对不起,加载出现异常!'
,page: true
});
//收藏list
table.render({
elem: '#coll-post'
,url: collListUrl //进列表接口
,title: ''
,cols: [[
{type: 'numbers', fixed: 'left'}
,{field: 'title', title: '标题',minWidth: 250,templet: '<div><a href="{{d.url}}">{{d.title}}</a></div>'}
,{field: 'auther', title: '作者', width: 120}
,{field: 'ctime', title: '时间', width: 120}
,{title: '取消', width: 80, align: 'center', toolbar: '#collTool'}
]]
,text: '对不起,加载出现异常!'
,page: true
});
//监听行工具事件
table.on('tool(art-post)', function(obj){
var data = obj.data;
var id = data.id;
if(obj.event === 'del'){
layer.confirm('确定删除吗?',{
title:'删除文章',
icon:3
},function(index){
layer.close(index);
$.post(atrDelUrl,{"id":id},function(data){
if(data.code == 0){
layer.msg(data.msg,{
icon:6,
time:2000
});
} else {
layer.open({
title:'删除失败',
content:data.msg,
icon:5,
adim:6
})
}
}
);
table.reload('art-post');
});
} else if(obj.event === 'edit'){//编辑
$.post(artEditUrl,{"id":id},function(){
location.href = artEditUrl + '?id=' + id;
});
}
});
//监听行工具事件
table.on('tool(coll-post)', function(obj){
var id = obj.data.id;
if(obj.event === 'del'){
layer.confirm('确定取消收藏?',{
title:'取消收藏',
icon:3
},function(index){
layer.close(index);
$.post(collDelUrl,{"id":id},function(data){
if(data.code == 0){
layer.msg(data.msg,{
icon:6,
time:2000
});
} else {
layer.open({
title:'取消失败',
content:data.msg,
icon:5,
adim:6
})
}
}
);
table.reload('coll-post');
});
}
});
var elemUC = $('#LAY_uc'), elemUCM = $('#LAY_ucm');
gather.minelog = {};
/*
gather.mine = function(index, type, url){
var tpl = [
//求解
'{{# for(var i = 0; i < d.rows.length; i++){ }}\
<li>\
{{# if(d.rows[i].collection_time){ }}\
<a class="jie-title" href="/jie/{{d.rows[i].id}}/" target="_blank">{{= d.rows[i].title}}</a>\
<i>{{ d.rows[i].collection_time }} 收藏</i>\
{{# } else { }}\
{{# if(d.rows[i].status == 1){ }}\
<span class="fly-jing layui-hide-xs"></span>\
{{# } }}\
{{# if(d.rows[i].accept >= 0){ }}\
<span class="jie-status jie-status-ok">已结</span>\
{{# } else { }}\
<span class="jie-status">未结</span>\
{{# } }}\
{{# if(d.rows[i].status == -1){ }}\
<span class="jie-status">审核中</span>\
{{# } }}\
<a class="jie-title" href="/jie/{{d.rows[i].id}}/" target="_blank">{{= d.rows[i].title}}</a>\
<i class="layui-hide-xs">{{ layui.util.timeAgo(d.rows[i].time, 1) }}</i>\
{{# if(d.rows[i].accept == -1){ }}\
<a class="mine-edit layui-hide-xs" href="/jie/edit/{{d.rows[i].id}}" target="_blank">编辑</a>\
{{# } }}\
<em class="layui-hide-xs">{{d.rows[i].hits}}/{{d.rows[i].comment}}</em>\
{{# } }}\
</li>\
{{# } }}'
];
var view = function(res){
var html = laytpl(tpl[0]).render(res);
dom.mine.children().eq(index).find('span').html(res.count);
elemUCM.children().eq(index).find('ul').html(res.rows.length === 0 ? '<div class="fly-msg">没有相关数据</div>' : html);
};
var page = function(now){
var curr = now || 1;
if(gather.minelog[type + '-page-' + curr]){
view(gather.minelog[type + '-page-' + curr]);
} else {
//我收藏的帖
if(type === 'collection'){
var nums = 10; //每页出现的数据量
fly.json(url, {}, function(res){
res.count = res.rows.length;
var rows = layui.sort(res.rows, 'collection_timestamp', 'desc')
,render = function(curr){
var data = []
,start = curr*nums - nums
,last = start + nums - 1;
if(last >= rows.length){
last = curr > 1 ? start + (rows.length - start - 1) : rows.length - 1;
}
for(var i = start; i <= last; i++){
data.push(rows[i]);
}
res.rows = data;
view(res);
};
render(curr)
gather.minelog['collect-page-' + curr] = res;
now || laypage.render({
elem: 'LAY_page1'
,count: rows.length
,curr: curr
,jump: function(e, first){
if(!first){
render(e.curr);
}
}
});
});
} else {
fly.json('/api/'+ type +'/', {
page: curr
}, function(res){
view(res);
gather.minelog['mine-jie-page-' + curr] = res;
now || laypage.render({
elem: 'LAY_page'
,count: res.count
,curr: curr
,jump: function(e, first){
if(!first){
page(e.curr);
}
}
});
});
}
}
};
if(!gather.minelog[type]){
page();
}
};
if(elemUC[0]){
layui.each(dom.mine.children(), function(index, item){
@ -142,7 +137,7 @@ layui.define(['laypage', 'fly', 'element', 'flow'], function(exports){
gather.mine(index, othis.data('type'), othis.data('url'));
});
}
*/
//显示当前tab
if(location.hash){
element.tabChange('user', location.hash.replace(/^#/, ''));

View File

@ -1,6 +1,7 @@
{extend name="public/base" /}
{block name="title"}发表帖子{/block}
{block name="link"}<link rel="stylesheet" href="/static/res/css/plyr.css" charset="utf-8">{/block}
{block name="column"}{/block}
{block name="content"}
<div class="layui-container fly-marginTop">
@ -142,12 +143,13 @@
});
</script>
<script>
layui.use(['fly','form','colorpicker','upload'], function(){
layui.use(['fly','form','colorpicker','upload','plyr'], function(){
var $ = layui.$
,fly = layui.fly
,form = layui.form
,colorpicker = layui.colorpicker
,upload = layui.upload;
,upload = layui.upload
,plyr = layui.plyr;
//如果你是采用模版自带的编辑器,你需要开启以下语句来解析。
$('.layui-textarea').each(function(){
@ -255,6 +257,9 @@
});
return false;
});
//加载播放器
plyr.setup();
});
</script>

View File

@ -46,7 +46,6 @@
</span>
</div>
<div class="fly-list-badge">
{if ($art.is_top == 1)} <span class="layui-badge layui-bg-black" >{:lang('top')}</span> {/if}
{if ($art.is_hot == 1)} <span class="layui-badge layui-bg-red">{:lang('hot')}</span> {/if}
</div>
</li>

View File

@ -3,6 +3,7 @@
{block name="title"}{$article.title}-{$sysInfo.webname}{/block}
{block name="keywords"}{$article.title},{$article.tags}{/block}
{block name="description"}{$article.title},{:getArtContent($article.content)}{/block}
{block name="link"}<link rel="stylesheet" href="/static/res/css/plyr.css" charset="utf-8">{/block}
{block name="column"}<div class="layui-hide-xs">{include file="/public/column" /}</div>{/block}
{block name="content"}
<div class="layui-container">
@ -228,10 +229,12 @@ var collectionFind = "{:url('Collection/find')}",
commentJiedaDelete = "{:url('Comment/jiedaDelete')}",
langCollection = "{:lang('collection')}",
langCancelCollection = "{:lang('cancel collection')}";
layui.use(['fly', 'face','colorpicker'], function(){
layui.use(['fly', 'face','colorpicker','plyr'], function(){
var $ = layui.$
,fly = layui.fly
,colorpicker = layui.colorpicker;
,colorpicker = layui.colorpicker
,plyr = layui.plyr;
//预定义颜色项
colorpicker.render({
@ -322,6 +325,8 @@ layui.use(['fly', 'face','colorpicker'], function(){
var othis = $(this), html = othis.html();
othis.html(fly.content(html));
})
//加载播放器
plyr.setup();
});

View File

@ -1,6 +1,7 @@
{extend name="public/base" /}
{block name="title"}编辑帖子{/block}
{block name="link"}<link rel="stylesheet" href="/static/res/css/plyr.css" charset="utf-8">{/block}
{block name="column"}{/block}
{block name="content"}
<div class="layui-container fly-marginTop">
@ -139,11 +140,13 @@
{block name="script"}
<script>
layui.use(['fly','colorpicker','form','upload'], function(){
layui.use(['fly','colorpicker','form','upload','plyr'], function(){
var $ = layui.$
,fly = layui.fly
,colorpicker = layui.colorpicker
,form = layui.form
,upload = layui.upload;
,upload = layui.upload
,plyr = layui.plyr;
//预定义颜色项
@ -261,6 +264,14 @@
$(this).remove();
});
});
//如果你是采用模版自带的编辑器,你需要开启以下语句来解析。
$('.layui-textarea').each(function(){
var othis = $(this), html = othis.html();
othis.attr(fly.content(html));
})
//加载播放器
plyr.setup();
});
</script>

View File

@ -8,6 +8,7 @@
<meta name="description" content="{block name="description"}描述{/block}">
<link rel="stylesheet" href="/static/layui/css/layui.css" charset="utf-8">
<link rel="stylesheet" href="/static/res/css/global.css" charset="utf-8">
{block name="link"}{/block}
<style>
/*5+ 引擎环境下自动隐藏无关元素*/
.html5plus .html5plus-hide {

View File

@ -8,203 +8,39 @@
-->
<div class="layui-tab layui-tab-brief" lay-filter="user" id="LAY_uc">
<ul class="layui-tab-title" id="LAY_mine">
<li data-type="mine-jie" lay-id="index" class="layui-this">我发的帖<span>{$article->total()}</span></li>
<li data-type="collection" lay-id="collection">我收藏的帖(<span>{$collect->total()}</span></li>
<li data-type="mine-jie" lay-id="index" href="{:url('user/post')}#index" class="layui-this">我发的帖</li>
<li data-type="collection" lay-id="collection" href="{:url('user/post')}#collection">我的收藏</li>
<li lay-id="postarc"><a href="{:url('article/add')}">我要发帖</a></li>
</ul>
<div class="layui-tab-content" style="padding: 20px 0;">
<div class="layui-form layui-form-pane layui-tab-item layui-show">
<table class="layui-table" lay-skin="line">
<colgroup>
<col >
<col width="100">
<col width="150">
<col width="150">
<col width="150">
</colgroup>
<thead>
<tr>
<th>帖子标题</th>
<th>状态</th>
<th>发表时间</th>
<th>数据</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{volist name="article" id="vo" }
<tr>
<td><a class="jie-title" href="{:url('article/detail',['id'=>$vo.id])}" target="_blank">{$vo.title}</a></td>
<td>{if $vo.status ==1}正常{else /}待审{/if}</td>
<td>{$vo.update_time|date='Y-m-d'}</td>
<td>{$vo.pv}阅/{$vo.comments_count}答</td>
<td><a class="layui-btn layui-btn-xs" href="{:url('article/edit',['id'=>$vo.id])}" target="_blank">编辑</a>
<a class="layui-btn layui-btn-xs article-del" href="javacript:;" dataid="{$vo.id}" return false;" target="_blank">删除</a>
</td>
</tr>
{/volist}
</tbody>
</table>
<div style="text-align: center" id="LAY_page">{$page|raw}</div>
<table class="layui-table" lay-skin="line" lay-filter="art-post" id="art-post"></table>
</div>
<div class="layui-form layui-form-pane layui-tab-item">
<table class="layui-table" lay-skin="line">
<colgroup>
<col >
<col width="150">
<col width="150">
<col width="100">
</colgroup>
<thead>
<tr>
<th>帖子标题</th>
<th>作者</th>
<th>收藏时间</th>
<th>取消收藏</th>
</tr>
</thead>
<tbody>
{volist name="collect" id="vo" }
<tr>
<td><a class="jie-title" href="{:url('article/detail',['id'=>$vo.article_id])}" target="_blank">{$vo.article_id|getArticName}</a></td>
<td>{$vo.article.user.name}</td>
<td>{$vo.create_time|date='Y-m-d'}</td>
<td><a class="layui-btn layui-btn-xs collection-quxiao" href="javacript:;" dataid="{$vo.article_id}" target="_blank">取消</a>
</td>
</tr>
{/volist}
</tbody>
</table>
<div id="LAY_page1"></div>
<table class="layui-table" lay-skin="line" lay-filter="coll-post" id="coll-post"></table>
</div>
<div class="layui-form layui-form-pane layui-tab-item">
<ul class="app-bind">
<li class="fly-msg app-havebind">
<i class="iconfont icon-qq"></i>
<span>已成功绑定您可以使用QQ帐号直接登录Fly社区当然您也可以</span>
<a href="javascript:;" class="acc-unbind" type="qq_id">解除绑定</a>
<!-- <a href="" onclick="layer.msg('正在绑定微博QQ', {icon:16, shade: 0.1, time:0})" class="acc-bind" type="qq_id">立即绑定</a>
<span>即可使用QQ帐号登录Fly社区</span> -->
</li>
<li class="fly-msg">
<i class="iconfont icon-weibo"></i>
<!-- <span>已成功绑定您可以使用微博直接登录Fly社区当然您也可以</span>
<a href="javascript:;" class="acc-unbind" type="weibo_id">解除绑定</a> -->
<a href="" class="acc-weibo" type="weibo_id" onclick="layer.msg('正在绑定微博', {icon:16, shade: 0.1, time:0})" >立即绑定</a>
<span>即可使用微博帐号登录Fly社区</span>
</li>
</ul>
</div>
</div>
</div>
<script type="text/html" id="artTool">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<script type="text/html" id="collTool">
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">取消</a>
</script>
{/block}
{block name="script"}
<script>
layui.use('laypage', function(){
var laypage = layui.laypage;
var url = '{:url('user/post')}?page='
//执行一个laypage实例
laypage.render({
elem: 'LAY_page1' //注意,这里的 test1 是 ID不用加 # 号
,count: {$count} //数据总数,从服务端得到
,limit: 10
,curr :{$Request.param.page ?: 1} //获取起始页
//,hash: 'page' //自定义hash值
,jump: function(obj, first){
//console.log(obj);
//console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
//console.log(obj.limit); //得到每页显示的条数
if(!first){ //跳转必须放在这个里边,不然无限刷新
window.location.href= url+obj.curr+'&limit='+obj.limit+'#collection'; //跳转
//layer.msg('第'+ url +'页');
}
}
});
});
</script>
var articleUrl = "{:url('user/article')}";
var artListUrl = "{:url('User/artList')}";
var collListUrl = "{:url('User/collList')}";
var atrDelUrl = "{:url('article/delete')}";
var artEditUrl = "{:url('article/edit')}";
var collDelUrl = "{:url('user/colltDel')}";
<script>
$(function(){
$('.collection-quxiao').click(function(){
var id = $(this).attr('dataid');
layer.confirm('确定取消吗?',{
title:'取消收藏',
icon:3
},function(index){
layer.close(index);
$.ajax({
type:'post',
url:"{:url('user/colltdel')}",
data:{id:id},
dataType:'json',
success:function(data){
if(data.code == 1){
layer.msg(data.msg,{
icon:6,
time:2000
},function(){
location.href = data.url;
});
} else {
layer.open({
title:'取消失败',
content:data.msg,
icon:5,
adim:6
})
}
}
});
});
return false;
});
$('.article-del').click(function(){
var id = $(this).attr('dataid');
layer.confirm('确定删除吗?',{
title:'删除文章',
icon:3
},function(index){
layer.close(index);
$.ajax({
type:'post',
url:"{:url('article/delete')}",
data:{id:id},
dataType:'json',
success:function(data){
if(data.code == 1){
layer.msg(data.msg,{
icon:6,
time:2000
},function(){
location.href = data.url;
});
} else {
layer.open({
title:'删除失败',
content:data.msg,
icon:5,
adim:6
})
}
}
});
});
return false;
});
});
</script>
{/block}