>整理時間:2018年9月17日 By w.y.b @Meizi Office
[TOC]
## 知識點:
1、視頻列表
2、視頻列表分頁
3、分頁與篩選地址組合
4、列表多條件篩選
## 一、視頻列表
### (一)屬性數據表
```
CREATE TABLE `屬性表名` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`attrtype` varchar(30) NOT NULL COMMENT '屬性分類',
`attrname` varchar(50) NOT NULL COMMENT '屬性名稱',
`value` smallint(5) NOT NULL DEFAULT '0' COMMENT '屬性值',
`listorder` smallint(5) NOT NULL DEFAULT '0' COMMENT '排序',
`status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '狀態 1:啟用,0:禁用',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
```
### (二)后臺處理
```
// 屬性
$video_list = Db::name('屬性表名')->where('attrtype','video')->select();
$this->assign('video_list',$video_list);
$level_list = Db::name('屬性表名')->where('attrtype','level')->select();
$this->assign('level_list',$level_list);
```
### (三)模板渲染
```
<div class="feifan123-net">
<span>類型</span>
<div class="list_nav j-list-nav" id="j-nav-type0">
<ul>
<li class="active"><a href="#"> 全部 </a></li>
{volist name="videoattr_list" id="vo"}
<li><a href="#"> {$vo.attrname} </a></li>
{/volist}
</ul>
</div>
</div>
<div class="feifan123-net">
<span>行業</span>
<div class="list_nav j-list-nav" id="j-nav-type2">
<ul>
<li class="active"><a href="#"> 全部 </a></li>
{volist name="level_list" id="vo"}
<li><a href="#"> {$vo.attrname} </a></li>
{/volist}
</ul>
</div>
</div>
```
## 二、視頻列表分頁
### (一)參考網址
>分頁
https://v3.bootcss.com/components/#pagination
為您的網站或應用提供帶有展示頁碼的分頁組件,或者可以使用簡單的翻頁組件。
>最新基于ThinkPHP5.0+BootStrap框架開發的自適應WAP手機端響應式界面博客系統PHP源碼
https://blog.csdn.net/wazyb8/article/details/79401940
>Bootstrap 分頁
http://www.runoob.com/bootstrap/bootstrap-pagination.html
>【thinkphp5】 分頁樣式修改
https://www.cnblogs.com/richerdyoung/p/7058952.html
>ThinkPHP5.0分頁手冊
http://www.hmoore.net/manual/thinkphp5/154294
>thinkphp5傳參分頁功能無效?解決方案
https://blog.csdn.net/houbin99999/article/details/72768240
### (二)分頁具體實現
#### 1、后臺處理
```
public function category(){
//分類ID
$id = input('id');
$this->assign('id',$id);
// 接收前臺屬性傳參
$attr['channel'] = (int)input('get.channel');
$attr['level'] = (int)input('get.level');
$this->assign('attr',$attr);
// 分類屬性
$videoattr_list = Db::name('屬性表')->where('attrtype','video')->select();
$this->assign('videoattr_list',$videoattr_list);
// 行業屬性
$level_list = Db::name('屬性表')->where('attrtype','level')->select();
$this->assign('level_list',$level_list);
// 視頻列表
$video_list = Db::name('視頻表')->order('id desc')->paginate(10,false,[
'type' => 'bootstrap',
'var_page' => 'page',
]);
$page = $video_list->render();
$this->assign('video_list',$video_list);
$this->assign('page',$page);
// 自動調用模型視圖
$template = getModInfoById($id,'category_template');
return view('../application/index/view/default/index/' . $template);
}
```
#### 2、前端渲染
>類型屬性
```
<div class="feifan123-net">
<span>類型</span>
<div class="list_nav j-list-nav" id="j-nav-type0">
<ul>
<li {if condition="empty($attr['channel'])"} class="active" {/if} ><a href="?channel=0&level={$attr.level}"> 全部 </a></li>
{volist name="videoattr_list" id="vo"}
<li {if condition="$vo.value eq $attr['channel']"} class="active" {/if}><a href="?channel={$vo.value}&level={$attr.level}"> {$vo.attrname} </a></li>
{/volist}
</ul>
</div>
</div>
```
>行業屬性
```
<div class="feifan123-net">
<span>行業</span>
<div class="list_nav j-list-nav" id="j-nav-type2">
<ul>
<li {if condition="empty($attr['level'])"} class="active" {/if} ><a href="?channel={$attr.channel}&level=0"> 全部 </a></li>
{volist name="level_list" id="vo"}
<li {if condition="$vo.value eq $attr['level']"} class="active" {/if}><a href="?channel={$attr.channel}&level={$vo.value}"> {$vo.attrname} </a></li>
{/volist}
</ul>
</div>
</div>
```
>排序屬性
```
<div class="feifan123-net bb0">
<span>排序</span>
<div class="list_nav j-list-nav">
<ul>
<li class="active"><a href="#">最新</a></li>
<li><a href="#">最熱</a></li>
</ul>
</div>
</div>
```
## 三、分頁與篩選地址組合
### (一)分頁參數組合
#### 1、接收前臺屬性傳參
```
$attr['channel'] = (int)input('get.channel');
$attr['level'] = (int)input('get.level');
$attr['page'] = (int)input('get.page');
$this->assign('attr',$attr);
```
#### 2、組合參數
```
$url = '/index/index/category?rand=' . rand(5, 12);
if($attr['channel']){
$url .= '&channel=' . $attr['channel'];
$query['channel'] = $attr['channel'];
}
if($attr['level']){
$url .= '&level=' . $attr['level'];
$query['level'] = $attr['level'];
}
if($attr['page']){
$url .= '&page=' . $attr['page'];
$query['page'] = $attr['page'];
}
```
#### 3、分頁組件調用
```
$video_list = Db::name('視頻表名')->order('id desc')->paginate(10,false,[
'type' => 'bootstrap',
'var_page' => 'page',
'query' => $query, // $query 是數組
]);
$page = $video_list->render();
$this->assign('page',$page);
```
### (二)改進組合
#### 1、自定義索引列表
>思路:改進TP5查詢方法,將數據中的ID作為鍵,原數據作為值,重新建立數組。
```
// 指定表名
public function table($table){
$this->where = array();
$this->field = '*';
$this->order = '';
$this->table = $table;
return $this;
}
// 指定查詢字段
public function field($field = '*'){
$this->field = $field;
return $this;
}
// 排序
public function order($order){
$this->order = $order;
return $this;
}
// 指定查詢條件
public function where($where = array()){
$this->where = $where;
return $this;
}
// 自定義索引列表
public function cates($index){
$query = Db::name($this->table)->field($this->field)->where($this->where);
$this->order && $query = $query->order($this->order);
$lists = $query->select();
if(!$lists){
return false;
}
$results = [];
foreach ($lists as $key => $value) {
$results[$value[$index]] = $value;
}
return $results;
}
```
#### 2、函數array_keys()
函數返回包含數組中所有鍵名的一個新數組。
如果提供了第二個參數,則只返回鍵值為該值的鍵名。
參考網址:http://www.w3school.com.cn/php/func_array_keys.asp
片段代碼:
`<?php if(!in_array($data['label_channel'],array_keys($channel_list))){echo 'class="selected"';}?>`
片段代碼:
```
$data['label_channel'] = (int)input('get.label_channel');
$channel_list = $this->db->table('video_label')->where(array('flag'=>'channel'))->cates('id');
$this->assign('channel_list',$channel_list);
```
```
<h3>頻道:</h3>
<ul class="mod_category_item">
<li <?php if(!in_array($data['label_channel'],array_keys($channel_list))){echo 'class="selected"';}?>>
<a href="/index.php/index/index/cate?label_channel={$data.label_channel}&label_charge={$data.label_charge}&label_area={$data.label_area}">全部</a>
</li>
{volist name="channel_list" id="channel"}
<li {if condition="$data.label_channel eq $channel.id"}class="selected"{/if}>
<a href="/index.php/index/index/cate?label_channel={$data.label_channel}&label_charge={$data.label_charge}&label_area={$data.label_area}">{$channel.title}</a>
</li>
{/volist}
<li class="close-mod_btn">
<a data-searchpingback-elem="link" data-searchpingback-param="ptype=11" href="javascript:;"
j-delegate="action"><em class="vm-inline">收起</em><i class="site-icons ico-explain-t"></i></a>
</li>
</ul>
<div class="openBtn">
<a class="openBtn-txt" href="javascript:;" j-delegate="action"><em class="vm-inline">更多</em><i
class="site-icons ico-explain-b"></i></a>
</div>
</div>
```
## 四、列表多條件篩選
### (一)數據表設計
#### 1、屬性表
```
CREATE TABLE `屬性表名` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`attrtype` varchar(30) NOT NULL COMMENT '屬性分類',
`attrname` varchar(50) NOT NULL COMMENT '屬性名稱',
`value` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '屬性值',
`listorder` smallint(5) NOT NULL DEFAULT '0' COMMENT '排序值',
`status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '狀態 1:啟用,0:禁用',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
```
#### 2、視頻表
```
CREATE TABLE `視頻表名` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`catid` int(11) NOT NULL DEFAULT '0' COMMENT '分類ID',
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '標題',
`keywords` varchar(100) NOT NULL DEFAULT '' COMMENT '關鍵詞',
`tags` varchar(255) NOT NULL DEFAULT '' COMMENT 'TAGS',
`description` varchar(255) NOT NULL DEFAULT '' COMMENT '摘要',
`thumb` varchar(100) NOT NULL DEFAULT '' COMMENT '縮略圖',
`username` varchar(20) NOT NULL DEFAULT '' COMMENT '用戶名',
`inputtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '發布時間',
`url` varchar(100) NOT NULL DEFAULT '' COMMENT 'URL',
`status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '狀態',
`views` int(11) NOT NULL DEFAULT '0' COMMENT '瀏覽量',
`listorder` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
`content` text NOT NULL,
`video` varchar(255) NOT NULL DEFAULT '',
`channel` tinyint(5) unsigned NOT NULL DEFAULT '1' COMMENT '分類屬性',
`level` tinyint(5) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
```
### (二)組合參數
```
// 分頁參數組合(數組)
$query['channel'] = $attr['channel'];
$query['level'] = $attr['level'];
$query['page'] = $attr['page'];
模板渲染
<li {if condition="empty($attr['channel'])"} class="active" {/if} ><a href="?channel=0&level={$attr.level}"> 全部 </a></li>
{volist name="videoattr_list" id="vo"}
<li {if condition="$vo.value eq $attr['channel']"} class="active" {/if}><a href="?channel={$vo.value}&level={$attr.level}"> {$vo.attrname} </a></li>
{/volist}
```
### (三)篩選條件
```
// 分頁參數組合(數組)
$query['channel'] = $attr['channel'];
$query['level'] = $attr['level'];
$query['page'] = $attr['page'];
// 組合條件
$where['status'] = 1;
if(!empty($attr['channel'])){
$where['channel'] = $attr['channel'];
}
if(!empty($attr['level'])){
$where['level'] = $attr['level'];
}
// 視頻列表
$video_list = Db::name('視頻表名')->where($where)->order('id desc')->paginate(10,false,[
'type' => 'bootstrap',
'var_page' => 'page',
'query' => $query,
]);
```
### (四)片段代碼
```
public function category(){
//分類ID
$id = input('id');
$this->assign('id',$id);
// 接收前臺屬性傳參
$attr['channel'] = (int)input('get.channel');
$attr['level'] = (int)input('get.level');
$attr['page'] = (int)input('get.page');
$this->assign('attr',$attr);
// 分類屬性
$videoattr_list = Db::name('屬性表名`')->where('attrtype','video')->select();
$this->assign('videoattr_list',$videoattr_list);
// 行業屬性
$level_list = Db::name('屬性表名')->where('attrtype','level')->select();
$this->assign('level_list',$level_list);
// 分頁參數組合(數組)
$query['channel'] = $attr['channel'];
$query['level'] = $attr['level'];
$query['page'] = $attr['page'];
// 組合條件
$where['status'] = 1;
if(!empty($attr['channel'])){
$where['channel'] = $attr['channel'];
}
if(!empty($attr['level'])){
$where['level'] = $attr['level'];
}
// 視頻列表
$video_list = Db::name('視頻表名')->where($where)->order('id desc')->paginate(10,false,[
'type' => 'bootstrap',
'var_page' => 'page',
'query' => $query,
]);
$page = $video_list->render();//p($video_list);die;
$this->assign('video_list',$video_list);
$this->assign('page',$page);
// 自動調用模型視圖
$template = getModInfoById($id,'category_template');
return view('../application/index/view/default/index/' . $template);
}
```
- Layer無刷新不跳轉彈框提示信息
- 整合ThinkPHP+實用代碼
- TP整合Layer插件實現無刷新
- 自定義助手函數
- 添加信息失敗后不跳轉
- 三種無限級分類
- TP常用代碼
- 自定義公共函數
- TP模型管理專題
- TP模型管理之添加模型
- sfox_newmodel.sql
- TP模型管理之刪除模型
- TP模型管理之編輯模型
- TP模型管理之字段添加
- sfox_newmodel.sql_edit
- layer_hplus.js_edit
- TP模型管理之字段刪除
- TP模型管理之字段編輯
- TP模型管理之預覽模型
- TP模型管理之公共函數
- layer_hplus.js_修訂一
- TP模型管理之預覽模型靜態頁
- 后臺內容管理系統
- 分類樹顯示
- 內容列表顯示
- 信息發布
- 編輯信息
- layer_hplus.js
- myJs第一版
- myJs第二版
- myJs第三版
- myJs第四版
- TP5插件用法
- Datatables
- WebUploader
- bootstrap-fileinput
- UEditor
- 簡單調用
- 路徑問題
- 跨域多圖上傳
- 跨域單圖上傳
- UEditor圖片跨域上傳解決方案
- 定制工具欄圖標
- ajaxFileUpload
- LayUI
- 圖片上傳
- layui分頁
- 搜索頁
- 搜索優化及刪除
- Uploadify
- TP5前端應用
- 靜態首頁
- 前臺首頁功能實現
- 自定義標簽庫
- 前臺模板繼承應用
- 首頁自定義標簽改進
- 文章內容頁
- 自定義標簽改進
- 自定義標簽修正
- 圖片等比例自動縮放
- 后臺權限管理
- 角色管理
- 規則管理
- 權限設置
- 會員管理
- 權限管理
- 前臺登錄注冊功能
- 注冊登錄
- 阿里大于手機注冊
- 阿里大于升級阿里云短信服務
- 自動登錄完成
- PHP異位或加密實現自動登陸
- 微信開發
- 分享接口
- 靜態頁面實現微信分享
- 動態頁微信分享
- 頁面靜態化
- 1-全站靜態化前期配置
- 2-鏈接地址靜態化
- TP5常用片段代碼
- 加載靜態資源路徑與常量
- thinkphp5預定義常量
- 刪除某文件夾的內容
- 解壓插件包
- 異步提交插件
- 其他功能
- 背景音樂
- 手機訪問PC網站自動跳轉到手機網站代碼
- 手機微信音樂MP3播放器
- 后盾之網頁背景音樂
- 播放器寬度自適應
- 前臺首頁數據調用
- 視頻列表
- 搜索分頁
- H5解決蘋果(IOS)不能自動播放音樂
- 清空緩存
- 文件處理常識
- 刪除路徑下的所有文件夾和文件
- 一鍵清空緩存
- 評論留言
- 格式化時間
- 替換微博內容的URL地址@用戶與表情
- PHP正則理解
- jQuery評論插件
- TP空操作
- TP路由
- 跨域訪問
- 設置請其頭允許跨域請求
- 模板前臺判斷手機訪問跳轉手機網址代碼
- PHP遍歷一個文件夾下所有文件和子文件夾
- PHP獲取視頻的第一幀與時長
- TP5數據庫
- 鏈式操作原理
- update替換字段部分內容
- 后臺開發
- 后臺登錄頁居中顯示
- TP5自帶驗證碼
- JS & JQuery專題
- 二級城市聯動菜單
- 模板引擎
- 混合模板編譯
- 黃永成TP微博開發
- 消息推送
- memcache安裝
- 插件開發
- 插件介紹
- 插件鉤子
- 淺談初步理解鉤子
- 插件鉤子(hooks)分析
- 插件鉤子簡單理解
- 控制器調用插件
- 鉤子通用處理函數
- 插件基類代碼
- 插件測試代碼
- 淺談鉤子與插件
- 技術綜合
- 常用代碼
- PHP
- 56個PHP開發常用代碼片段(上)
- 56個PHP 開發常用代碼片段(中)
- 56個PHP 開發常用代碼片段(下)
- sublime text安裝自動補全注釋的插件
- 影音視頻開發
- 視頻
- H5視頻直播掃盲
- 音樂
- 語音
- PHP實現語音播報功能
- MUI
- 窗體操作