# 留言插件的開發
> 通過前幾節對插件以及創建擴展的學習,已經對插件有了基本的認識,在這里咱就來開發一個`在線留言`插件。
## 插件功能
### 1\. 在博文詳情頁添加上在線留言功能
### 2\. 留言給博文對應有作者
### 3\. 個人博客后臺可以查看自己的博客留言信息
本插件不但需要在前臺進行展示,同時博文作者可以通過個人博客后臺查看留言
## 知識點
### 1\. 留言表的創建(sql創建)
### 2\. 插件中靜態資源文件的引入方式
## 第一部分:創建留言插件
> 按照前幾節課制定的插件開發規范,創建留言插件`message`,由于在個人博客后臺需要添加查看留言的菜單項,所以在插件基本信息中,直接加上菜單項的配置。另外,需要在鉤子方法設置留言表單的模板。
## 第二部分:數據表的創建
> 在創建留言表時,需要在安裝插件時直接創建,所以需要使用建表語句來創建。
> 留言表-建表語句(根據需要自行調整)
~~~
CREATE TABLE `td_message` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL DEFAULT '0' COMMENT '姓名',
`phone` VARCHAR(11) NOT NULL DEFAULT '0' COMMENT '手機號',
`content` VARCHAR(200) NOT NULL DEFAULT '0' COMMENT '留言內容',
`create_time` INT(10) NOT NULL DEFAULT '0',
`update_time` INT(10) NOT NULL DEFAULT '0',
`touid` INT(10) NOT NULL DEFAULT '0' COMMENT '留言對象',
PRIMARY KEY (`id`)
)
COMMENT='留言表'
ENGINE=MyISAM
;
~~~
> 在這里要注意,建表語句的存放位置,一般情況下可以放到一個文件里比如,課程中是直接放到了留言插件目錄下的`install.sql`。另外,由于一個插件對于數據庫的操作可能有多個,所以在安裝時需要執行的sql語句并不一定只有一個,也就是install.sql中存放的`sql`語句可能有多個,那么這里就要分開來執行,所以需要對install.sql中的語句進行分解,即把`sql`語句拆分。折分后,再循環執行。
### 創建數據表的注意事項
#### 1\. install.sql文件中,結尾不要有空行
#### 2\. 在進行拆分`sql`語句時,要進行空數據的過濾
#### 3\. 要進行數據表的存在性判斷
數據表創建代碼片段
~~~
//創建留言數據表
$sql_content=file_get_contents(ADDON_PATH .'message/install.sql');//獲取sql腳本
$arr_sql=array_filter(explode(";",$sql_content));//對sql進行拆分,并過濾空數據
foreach ($arr_sql as $v){//循環執行sql
Db::execute($v);
}
~~~
## 第三部分 創建鉤子模板(留言表單)
> 要實現留言功能,首先需要添加留言表單。通過鉤子模板來實現。在這里要注意表單樣式,由于鉤子模板會做為所在頁面的一部分,所以會繼承當前頁面的樣式。具體效果可以自行進行設置。
## 第四部分 實現留言功能
> 留言表單處理好后,接下來要做的就是將用戶的留言數據通過表單提交到后端處理并寫入數據表(td\_message)。
在這里重點看一下處理表單提交業的數據處理如何實現。在這里插件擴展也遵循TP5的MVC模式。所以對于留言數據的處理,也要通過控制器模型的方式來實現(也可以不使用模型層)。
### 1\. 在插件目錄下創建控制器目錄`controller`和模型目錄`model`
### 2\. 創建控制器`Index.php`和數據處理的方法`save`
> 在這里的控制器名稱和方法名稱可是自定義的。
#### 注意事項
##### 1\. 控制器的命名空間要注意`addons\message\controller`
##### 2\. 控制器要繼承插件擴展中`think\addons\Controller`并不是`think\Controller`
~~~
<?php
namespace addons\message\controller;
use think\addons\Controller;
use addons\message\model\Message;
class Index extends Controller
{
/**
* 在線留言數據處理
*/
public function save(){
$data=input('post.');
$result=Message::store($data);
if($result){
$this->success("留言成功");
}else{
$this->error("留言失敗");
}
}
}
~~~
### 3\. 模型的創建
> 在創建模型時,和TP中的模式的使用方法是完一樣的,也同樣需要繼承Think的Model基類。
> \[danger\]要注意的是和數據表的對應(確認表前輟是否和系統默認配相同)。
~~~
<?php
namespace addons\message\model;
use think\Model;
class Message extends Model
{
protected $table = 'td_message';
protected $autoWriteTimestamp = true;
public static function store($data){
if(!is_array($data)){
return false;
}
//獲取博文發布的id
$touid=db("blogcate")->where('cid',$data['cid'])->value('uid');
$data['touid']=$touid;
$result=self::create($data);
if($result){
return true;
}
return fase;
}
}
~~~
> 由于要指定留言的對像,所以在留言時需要獲取到博文發布著的用戶id。在這里要注意一點,前臺博文詳情頁中的模板變量,在插件模板中是不能直接使用的。所以在這里需要在調用插件時,通過參數的方式進行傳遞。
所以博文詳情頁中調用留言插件時,如下調用
~~~
{:hook("messagehook",['cid'=>$article.cid])}
~~~
## 第五部分 個人博客管理后臺查看留言功能的實現
> 在這里開發MVC的模式和application下的模人開發是一樣的。但是要注意以下幾 。
注意事項:
1. 插件中的 控制器方法的訪問方式不同
2. 模板拆分中的路徑設置問題(相對路徑)
3. 插件和application中共用模板時的路徑設置
4. 做后臺插件時,要注意插件的訪問權限(判斷用戶是否登錄)
# 插件中靜態資源文件的處理
> 在很多場景下,插件下是需要靜態資源文件的,如js、css、imgage等。像這些在訪問時,需要在站點根目錄下(public)下才可以訪問。所以在安裝插件時,需要對靜態資源文件進行處理。
> 通常情況下會將`靜態資源文件`移動到public目錄下。具體的規則需要規范化。比如,約定插件的資源文件安裝后,會移入`public\static\addons`目錄下
5.
- 課程介紹
- thinkphp5.0
- 安裝
- 開發規范
- 目錄結構
- 配置參數
- 系統常量
- tp5自帶的函數
- 助手函數
- 擴展類庫
- 基本類庫
- Workerman
- think-queue
- 驗證碼
- 圖片
- 權限認證
- 課前準備
- 數據庫設計
- 模塊設計
- 管理員管理
- 添加
- 編輯
- 刪除和批量刪除
- 列表頁
- 實列
- 權限管理
- 操作日志
- 基于行為的日記錄
- 行為日志的擴展
- 助手類庫
- 自建函數
- 將數組轉成uri字符串
- 獲取當前服務器的IP
- curl-post
- 截取文字中間的字符串
- 檢查中文姓名
- 省市區分別截取
- 抽獎概率問題
- 短信郵箱模板替換
- 生成csv
- PHP 圖片轉base64
- 銀行卡驗證
- json返回接口封裝
- 無限極分類
- 病毒
- xml和數組互轉
- xml轉成數組
- 數組轉xml
- tp控制器相關
- 獲取thinkph5下控制器和方法名
- 后臺查詢的簡單封裝
- 網址信息
- 獲取網站logo
- 判斷url是否存在
- 獲取title
- 判斷遠程文件是否存在
- 獲取頁面所有鏈接
- 過濾
- 截取
- 時間
- 獲取服務器信息
- 根據id生成唯一邀請碼
- 隨機顏色
- 數組字符串互換
- 創建多級目錄
- 懶人查詢
- 時間和時間戳轉換
- 房間id生菜
- 獲取需要的數組元素
- 文件和文件夾
- 文件類庫
- 文件夾
- 七牛云
- 七牛云運用場景
- 七牛云使用實例
- 郵箱
- 郵箱驗證
- 郵箱發送
- 數據庫
- 數據庫在thinkphp中的補充方法
- 備份和安全
- sql執行
- 數據庫備份2
- 時間日歷
- 時間格式化
- 日歷
- 圖片相關
- 自動獲取圖片主題顏色
- 獲取html中的圖片路徑
- 獲取圖片場景
- 獲取圖片實踐
- 圖片處理類
- 圖片處理場景
- 圖片處理實踐
- 數據驗證分析
- 身份證相關
- 新聞
- 自建類庫
- 簡易分類庫
- php 壓縮CSS代碼
- 身份證
- 分詞和抽詞
- 分詞應用場景
- 分詞實踐
- 中文轉拼音
- 中文轉拼音場景
- 中文轉拼音實踐
- 二維碼操作
- 二維碼場景
- 二維碼實踐
- 短地址
- PHPWord
- 插件化
- 插件擴展庫
- 插件列表
- 插件安裝和卸載
- 插件實踐
- 插件的離線安裝
- 計劃任務
- 計劃任務安裝
- 計劃任務實踐
- 定時器
- 注冊登錄
- 普通登錄注冊
- 第三方登錄注冊
- jwt接口登錄注冊
- 短信
- 飛鴿短信
- 阿里短信
- 消息隊列
- 網站地圖
- 全站靜態化
- 緩存
- 文件導出
- PDF生成
- phpword
- PHPExcel
- 其他類庫
- 百度
- 百度語音
- 快遞
- 跨域問題
- 寶塔
- 搜索記錄