# 留言插件的开发
> 通过前几节对插件以及创建扩展的学习,已经对插件有了基本的认识,在这里咱就来开发一个`在线留言`插件。
## 插件功能
### 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
- 其他类库
- 百度
- 百度语音
- 快递
- 跨域问题
- 宝塔
- 搜索记录