# 【TP5·預覽模型·思路分析】
[TOC]
## 知識點
> 1、制作靜態模型預覽模板(整合WebUploader、UEditor)
2、整合多圖片上傳插件WebUploader
3、整合編輯器(百度編輯器UEditor 1.4.3.3版本)
4、自動生成模型預覽頁面(根據模型字段自動生成)
5、定界符(<<<EOF ... EOF(必須頂格寫);)
6、選項(box)字段預覽思路理解
7、條件判斷(兩種方法)一是if....else...(條件三種以內);二是switch...case...(多條件)
8、回車鍵(\n)注意回車鍵必須在雙引號之間才有用("\n")
9、循環中不顯示某部分內容{volist name="forminfos" id="vo" key="k"}...{/volist}默認key為i
## 問題
> 1、異步刪除不能正常使用(已解決:contentType:"application/x-www-form-urlencoded", )
2、文本編輯器顯示不出來(已解決:定義一個插件路徑)
## 備注:$.ajax 中的contentType和dataType
參考網頁:https://www.cnblogs.com/htoooth/p/7242217.html
contentType 主要設置你發送給服務器的格式
dataType 設置你收到服務器數據的格式
在 jquery 的 ajax 中, contentType都是默認的值:application/x-www-form-urlencoded
這種格式的特點就是,name/value 成為一組,每組之間用 & 聯接,而 name與value 則是使用 = 連接。
如: wwwh.baidu.com/q?key=fdsa&lang=zh 這是get
而 post 請求則是使用請求體,參數不在 url 中,在請求體中的參數表現形式也是: key=fdsa&lang=zh的形式。
## 【循環中不顯示某部分內容】
> 1、控制器獲取記錄總條數
$info為當前模型字段總條數
$this->assign('total_num',count($info));
> 2、模板中判斷:當total_num不等于總條數,則輸出虛線
~~~
{volist name="forminfos" id="vo" key="k"}
<div class="form-group" {eq name='vo.formtype' value='datetime'}id="data_1"{/eq}>
<label class="col-sm-2 control-label">{$vo.name}</label>
<div class="col-sm-10">
{$vo.form}
</div>
</div>
{neq name="total_num" value="$k"}<div class="hr-line-dashed"></div>{/neq}
{/volist}
~~~
## 【自動生成模型預覽頁面】
### 思路
> a、獲取模型的字段
b、獲取字段的類型
c、給類型寫成函數(函數生成相應的模板)
d、顯示在模板中去
### 1、控制器代碼
~~~
//獲取當前模型字段$id為模型ID
$modelsFieldArray = Db::name('models_field')->where('modelid',$id)->order('sort')->select();
//預覽模型
foreach ($modelsFieldArray as $value) {
//字段名
$field = $value['field'];
//字段類型
$func = $value['formtype'];
//判斷函數是否存在$func為變量函數
//函數位置:當前模塊下面的common.php文件
if(function_exists($func)){
//獲取表單HTML代碼
$form = $func($value);
if($form != ''){
$info[$field] = array(
'name' => $value['name'],
'form' => $form,
'formtype' => $value['formtype']
);
}
}
}
$this->assign('forminfos',$info);
~~~
### 2、公共函數
~~~
函數文件位置:application/admin/common.php
function text($fieldinfo){
//字段名
$field = $fieldinfo['field'];
//反序列化設置項
$setting = unserialize($fieldinfo['setting']);
//默認值
$value = $setting['defaultvalue'];
//是否密碼框
$type = "text";
if( $setting['ispassword'] ) {
$type = "password";
}
$form = <<<EOF
<input id="info_$field" name="info[$field]" type="$type" class="form-control" value="$value">
EOF;
return $form;
}
~~~
其它字段(變量函數,單獨新建文件,見:TP模型管理之公共函數)
### 3、模板代碼
~~~
{volist name="forminfos" id="vo"}
<div class="form-group">
<label class="col-sm-2 control-label">{$vo.name}</label>
<div class="col-sm-10">
{$vo.form}
</div>
</div>
<div class="hr-line-dashed"></div>
{/volist}
~~~
## 是否密碼框
~~~
$type = "text";
if( $setting['ispassword'] ) {
$type = "password";
}
<input type="$type" class="form-control" name="$field" value="$value">
~~~
## TP5整合相關插件
### 整合多圖片上傳插件WebUploader
#### 插件簡介
WebUploader是由Baidu WebFE(FEX)團隊開發的一個簡單的以HTML5為主,FLASH為輔的現代文件上傳組件。
在現代的瀏覽器里面能充分發揮HTML5的優勢,同時又不摒棄主流IE瀏覽器,沿用原來的FLASH運行時,兼容IE6+,iOS 6+, android 4+。
兩套運行時,同樣的調用方式,可供用戶任意選用。
采用大文件分片并發上傳,極大的提高了文件上傳效率。
官網:http://fex.baidu.com/webuploader/
#### 快速入門
第一、插件位置:WWW\tp5\public\static\admin\plugins\webuploader-0.1.5
第二、引入資源:使用Web Uploader文件上傳需要引入三種資源:JS, CSS, SWF。
~~~
<!--引入CSS-->
<link rel="stylesheet" type="text/css" href="webuploader文件夾/webuploader.css">
<!--引入JS-->
<script type="text/javascript" src="webuploader文件夾/webuploader.js"></script>
<!--SWF在初始化的時候指定,在后面將展示-->
~~~
第三、圖片上傳
與普通文件上傳相比,此demo演示了:文件過濾,圖片預覽,圖片壓縮上傳等功能。
#### 代碼介紹
> 1、Html
要實現如上demo,首先需要準備一個按鈕,和一個用來存放添加的文件信息列表的容器。
~~~
<!--dom結構部分-->
<div id="uploader-demo">
<!--用來存放item-->
<div id="fileList" class="uploader-list"></div>
<div id="filePicker">選擇圖片</div>
</div>
~~~
> 2、Javascript(創建Web Uploader實例)
~~~
// 初始化Web Uploader
var uploader = WebUploader.create({
// 選完文件后,是否自動上傳。
auto: true,
// swf文件路徑
swf: BASE_URL + '/js/Uploader.swf',
// 文件接收服務端。
server: 'http://webuploader.duapp.com/server/fileupload.php',
// 選擇文件的按鈕。可選。
// 內部根據當前運行是創建,可能是input元素,也可能是flash.
pick: '#filePicker',
// 只允許選擇圖片文件。
accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/*'
}
});
~~~
> 3、初始化代碼修改
> 在BootStrap的tab組件中加入webuploader,如果不是默認頁會出現點擊無法彈出打開對話框,
解決方法即將初始化代碼放在單獨的函數中調用
~~~
$('a[data-toggle="tab"]').on('shown.bs.tab',function(e){
var target = e.target.toString();
if(target.indexOf('tab-4')>0){
initWebUploader();
}
});
~~~
#### 知識點:Bootstrap 標簽頁(Tab)插件
參考網址:http://www.runoob.com/bootstrap/bootstrap-tab-plugin.html
標簽頁(Tab)在 Bootstrap 導航元素 一章中介紹過。通過結合一些 data 屬性,您可以輕松地創建一個標簽頁界面。
通過這個插件您可以把內容放置在標簽頁或者是膠囊式標簽頁甚至是下拉菜單標簽頁中。
如果您想要單獨引用該插件的功能,那么您需要引用 tab.js。
或者,正如 Bootstrap 插件概覽 一章中所提到,您可以引用 bootstrap.js 或壓縮版的 bootstrap.min.js。
> 用法
您可以通過以下兩種方式啟用標簽頁:
通過 data 屬性:您需要添加 data-toggle="tab" 或 data-toggle="pill" 到錨文本鏈接中。
添加 nav 和 nav-tabs 類到 ul 中,將會應用 Bootstrap 標簽樣式,添加 nav 和 nav-pills 類到 ul 中,將會應用 Bootstrap 膠囊式樣式。
> 事件
下表列出了標簽頁(Tab)插件中要用到的事件。這些事件可在函數中當鉤子使用。
事件一:show.bs.tab
該事件在標簽頁顯示時觸發,但是必須在新標簽頁被顯示之前。
分別使用 event.target 和 event.relatedTarget 來定位到激活的標簽頁和前一個激活的標簽頁。
~~~
$('a[data-toggle="tab"]').on('show.bs.tab', function (e) {
e.target // 激活的標簽頁
e.relatedTarget // 前一個激活的標簽頁
})
~~~
#### webuploader 第二種樣式
或將照片拖到這里,單次最多可選300張
參考網址:http://fex.baidu.com/webuploader/demo.html
> 1、引入文件
~~~
<link href="__ADMIN__/plugins/webuploader-0.1.5/xb-webuploader.css" rel="stylesheet">
<script type="text/javascript">
var BASE_URL = "__ADMIN__/plugins/webuploader-0.1.5";
</script>
<script src="__ADMIN__/js/uploader.js"></script>
<script src="__ADMIN__/plugins/webuploader-0.1.5/webuploader.js"></script>
~~~
> 2、html代碼
~~~
<div id="uploader" class="xb-uploader">
<div class="queueList">
<div class="placeholder">
<div class="filePicker"></div>
<p>或將照片拖到這里,單次最多可選300張</p>
</div>
</div>
<div class="statusBar" style="display:none;">
<div class="progress">
<span class="text">0%</span>
<span class="percentage"></span>
</div>
<div class="info"></div>
<div class="btns">
<div class="webuploader-container filePicker2">
<div class="webuploader-pick">繼續添加</div>
<div style="position: absolute; top: 0px; left: 0px; width: 1px; height: 1px; overflow: hidden;" id="rt_rt_1armv2159g1o1i9c2a313hadij6">
</div>
</div>
<div class="uploadBtn">開始上傳</div>
</div>
</div>
</div>
~~~
> 3、js代碼
這里只張貼關鍵代碼,JS初始化(實例化)
~~~
// 實例化
uploader = WebUploader.create({
pick: {
id: "#uploader .filePicker",
label: '點擊選擇文件',
multiple : true
},
dnd: "#uploader .queueList",
paste: document.body,
// accept: {
// title: 'Images',
// extensions: 'gif,jpg,jpeg,bmp,png',
// mimeTypes: 'image/*'
// },
// swf文件路徑
swf: BASE_URL + '/Uploader.swf',
disableGlobalDnd: true,
chunked: true,
server: "ajax_upload",
fileNumLimit: 300,
fileSizeLimit: 200 * 1024 * 1024, // 200 M
fileSingleSizeLimit: 50 * 1024 * 1024 // 50 M
});
~~~
### 整合編輯器(百度編輯器UEditor 1.4.3.3版本)
#### 官方網站:
http://fex.baidu.com/ueditor/
#### 思路分析
~~~
<!-- 加載編輯器的容器 -->
<script id="container" name="content" type="text/plain">
這里寫你的初始化內容
</script>
<!-- 配置文件 -->
<script type="text/javascript" src="ueditor.config.js"></script>
<!-- 編輯器源碼文件 -->
<script type="text/javascript" src="ueditor.all.js"></script>
<!-- 實例化編輯器 -->
<script type="text/javascript">
var ue = UE.getEditor('container');
</script>
~~~
#### 代碼實現
> 1、html代碼
~~~
<div class="form-group">
<label class="col-sm-2 control-label">編輯器</label>
<div class="col-sm-10">
<script id="container" name="content" type="text/plain">雪狐網</script>
<script src="__ADMIN__/plugins/ueditor1_4_3_3/ueditor.config.js"></script>
<script src="__ADMIN__/plugins/ueditor1_4_3_3/ueditor.all.js"></script>
<script>
var um = UE.getEditor('container',{
initialFrameHeight:300,
autoHeightEnabled:false,
catchRemoteImageEnable:true
});
</script>
</div>
</div>
~~~
備注:編輯器插件很簡單,就上面的代碼即可
- 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
- 窗體操作