layui 数组表格 分页问题,如果返回是全部数据,layui分页就不能用,
因为layui是通过接口只会取得需要的那一页的数据,不会多返回其它数组
一、用例子说明:
4.5 获取课堂录制下的所有课件
展示互动返回直播的所有回放列表,展示互动是直接返回该直播的所有回放列表,不能读哪一页数据返回那一页数据
所以要分页,就要用到PHP本身的数组分页功能
1.模板
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>直播加放视频列表</title>
<link rel="stylesheet" href="__STATIC__/layui/css/layui.css" media="all">
<script src="__STATIC__/layui/layui.js"></script>
</head>
<body style="background-color: #FFFFFF;">
<!-- 你的HTML代码 -->
<!-- 表格 -->
<div class="layui-fluid" >
<div class="demoTable" style="margin:20px 0">
<div class="layui-inline">
<input class="layui-input" name="limit" id="limit" style="width: 50px;" placeholder="行数" value="{empty name="limit"}10{else /}{$limit}{/empty}" >
</div>
<div class="layui-inline layui-form">
<select name="sotype" id="sotype" lay-search>
<option value="">请选择搜索类型</option>
<option value="title" {if $sotype == "title" }selected {/if}>标题</option>
</select>
</div>
<div class="layui-inline">
<input class="layui-input" name="sotitle" id="sotitle" value="{$sotitle}">
</div>
<button class="layui-btn" id="sear" data-type="reload" type="button">搜索</button>
</div>
<div class="layui-btn-group demoTable" style="margin-top: 10px;">
<table class="layui-hide" id="demo" lay-filter="demo"></table>
<script type="text/html" id="switchTpl">
<!-- 这里的 checked 的状态只是演示 -->
<input type="checkbox" name="sex" value="{{d.id}}" lay-skin="switch" lay-text="女|男" lay-filter="sexDemo" {{ d.id == 10003 ? 'checked' : '' }}>
</script>
<script type="text/html" id="checkboxTpl">
<!-- 这里的 checked 的状态只是演示 -->
<input type="checkbox" name="lock" value="{{d.id}}" title="锁定" lay-filter="lockDemo" {{ d.id == 10006 ? 'checked' : '' }}>
</script>
</div>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="distributionuser">分配</a>
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" onclick="{:url('del',array('id'=>$admin['id']))}')">删除</a>
</script>
</div>
<!-- 表格end -->
<script>
layui.use(['layer', 'form','jquery','table'], function(){
var layer = layui.layer
,form = layui.form
,$= layui.$
,table=layui.table;
table.render({
elem: '#demo'
,url: '{:url('look_live_video_list')}'
,where:{action:'liveroomtable',id:{$id}}
//,limit:2
,cellMinWidth: 80
,cols: [[
{type:'numbers'}
,{field:'id', title:'课件ID', width:70}
,{field:'number', title:'编号', width:120}
,{field:'url', title:'课件的URL', width:120}
,{field:'subject', title:'课件名字', width:120}
,{field:'roomId', title:'所属课堂名称', width:120}
,{field:'recordId', title:' 资源ID', width:120}
,{field:'token', title:'课件口令', width:120}
,{field:'createdTime', title:'创建时间', width:120}
]]
,page: true
});
//排序
table.on('sort(demo)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
//尽管我们的 table 自带排序功能,但并没有请求服务端。
//有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,如:
table.reload('demo', {
initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。 layui 2.1.1 新增参数
,where: { //请求参数
field: obj.field //排序字段
,order: obj.type //排序方式
}
});
});
//监听工具条
table.on('tool(demo)', function(obj){
var data = obj.data;
if(obj.event === 'look'){
//layer.alert('编辑行:<br>'+ JSON.stringify(data))
layer.ready(function(){
layer.open({
type: 2,
title: '编辑',
maxmin: false,
area: ['80%', '70%'],
content: '{:url('edit')}?id='+data.id,
cancel: function(){ //刷新网页
//table.reload('idTest');//重新加载表格数据
self.location='{:url('index')}';
}
});
});
}
});
var $ = layui.$, active = {
//搜索
reload: function(){
var demoReload = $('#sotitle').val();
table.reload('demo', {
where: {
sotype: $("#sotype").val()
,limit: $('#limit').val()
,sotitle: $('#sotitle').val()
,starttime: $('#starttime').val()/*创建 开始时间*/
,enttime: $('#enttime').val()/*创建 结束时间*/
}
});
}
};
$('.demoTable .layui-btn').on('click', function(){
//$(document).on('click','#sear',function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
//按enter键进行查询
$(document).keyup(function(event){
if(event.keyCode==13){
var type = $("#sear").data('type');
active[type] ? active[type].call(this) : '';
}
});
});
</script>
</body>
</html>
2.控制器
/**
* 回放列表-服务器返回的数据 观看直播回放
*/
public function look_live_video_list(){
$id=input('id');
$page=input('page');
$limit=input('limit');
$this->assign('id',$id);
$action=input('action');
if(!$id){
echo "错误:必要参数不能为空!";die;
}
if($action=="liveroomtable"){
//判断是否已经生成回放/取得实时课堂ID
$rs_live=Db::name('live_course')->where('id',$id)->find();
//先判断是那个直播供应商 1展视互动 2保利威视
$live_type=checkRepeat('system_setup',5,1,'value',1);//点播初始化
if($live_type==1){// 1展视互动
$roomid=$rs_live['field1'];//实时课堂ID
if(!$roomid){
echo "错误:直播课堂ID为空,没有生成直播间!";die;
}
//4.5 获取课堂录制下的所有课件 取得服务器上的课件ID
//取得帐号、密码、接口路径
$loginName=checkRepeat('system_setup',2,1,'value',1);//展视互动 loginName
$password=checkRepeat('system_setup',3,1,'value',1);//展视互动 password
$url_1=checkRepeat('system_setup',4,1,'value',1);//展视互动 接口网址
//获取课堂录制下的所有课件 只要取得课件ID
// $url = 'http://jysjsz.gensee.com/integration/site/training/room/deleted';
$url1=$url_1;//http://jysjsz.gensee.com/integration/site/
$url2="training/courseware/list";//接口路径 获取课堂录制下的所有课
$url =$url1.$url2;//组合成完整接口网址
//dump($password);
$post_data = array (
'loginName' => $loginName,//登录名
'password' => $password,//密码
'roomId' => $roomid,//实时课堂ID 删除专用
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置请求为post类型
curl_setopt($ch, CURLOPT_POST, 1);
// 添加post数据到请求中
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
// 执行post请求,获得回复
$response= curl_exec($ch);
curl_close($ch);
//echo $response;
//错误信息提示
if ($response === FALSE) {//没有取得返回数据
echo "cURL 具体出错信息: " . curl_error($ch);die;
}
//取得返回数组
$jsonStr=$response;
$arr = json_decode($jsonStr, true);
$code = $arr['code'];//返回结果代码
$count =count($arr['coursewares']);
// $live_12 =$arr['coursewares'][0]['number'];//课件编号
// $live_13 =$arr['coursewares'][0]['url'];//课件的 URL
if($code!=0){//0等于成功
echo "错误".$code.":获取课件ID失败,原因:".$arr['message'];die;
//exit;
}
//取得录播记录数组
$array = $arr['coursewares'];
$data=page_array($limit,$page,$array,0);
//$count=1000;
json(0,'数据返回成功',$count,$data);
//dump($arr) ;die;
// return $arr;die;
}elseif($live_type==2){//2保利威视
}else{
}
}
return view(look_live_video);
}
注意:php数组分页函数
$data=page_array($limit,$page,$array,0);
/**
* 数组分页函数 核心函数 array_slice
* 用此函数之前要先将数据库里面的所有数据按一定的顺序查询出来存入数组中
* $count 每页多少条数据
* $page 当前第几页
* $array 查询出来的所有数组
* order 0 - 不变 1- 反序
*/
function page_array($count,$page,$array,$order){
global $countpage; #定全局变量
$page=(empty($page))?'1':$page; #判断当前页面是否为空 如果为空就表示为第一页面
$start=($page-1)*$count; #计算每次分页的开始位置
if($order==1){
$array=array_reverse($array);
}
$totals=count($array);
$countpage=ceil($totals/$count); #计算总页面数
$pagedata=array();
$pagedata=array_slice($array,$start,$count);
return $pagedata; #返回查询数据
}