[TOC]
# 模型添加·思路分析
> 模型添加思路分析(变动三张表):
1、数据表models中一条模型记录
2、数据表models_field中添加公共字段(系统字段为1,公共字段对应模型ID)
3、添加新模型的数据表(私有字段)
## 1、判断数据表是否存在
~~~
$data = input('post.');
if(trim($data['tablename'])==''){
return error('新模型表名不能为空!');
exit();
}
~~~
## 2、判断新模型是否存在(数据表models中是否存在相应的模型信息)
~~~
$models = new ModelsModel;
if($models::where('tablename',$data['tablename'])->count()){
return error('模型已经存在!');
exit();
}
~~~
## 3、判断新模型数据表是否存在(数据库中是否有新的模型数据表)
~~~
$tables = $models->list_tables();
if(in_array(config('database.prefix').$data['tablename'],$tables)){
return error('模型数据表已经存在!');
exit();
}
~~~
#### 自定义函数list_tables() //models模型方法
~~~
//返回数组格式的全部表名
public function list_tables(){
$tables = array();
$data = Db::query('SHOW TABLES');
foreach ($data as $value) {
$tables[] = $value['Tables_in_'.config('database.database')];
}
return $tables;
}
~~~
## 4、添加模型信息(功能比较复杂:完成前三步)
### // 第1步:新增models数据表记录
~~~
if($this->allowField(true)->save($data)){
return true;
}else{
return false;
}
~~~
### // 第2步:在models_field数据表中添加公共字段信息
~~~
const newModelSql = './data/sfox_newmodel.sql';
$dbPrefix = config('database.prefix');//获取表前缀
//读取新模型公共字段的SQL文件
$newModelSql = file_get_contents(self::newModelSql);
//表前缀的替换
$sqlSplit = str_replace(array('@cmsprefix@','@modelid@','@cmstablename@'),array($dbPrefix,$this->id,$data['tablename']),$newModelSql);
//批量执行sql
$sqlSplitArray = explode('--',$sqlSplit);
foreach ($sqlSplitArray as $value) {
Db::execute($value);
}
return true;
~~~
# 模型的相关代码(片段)
## 【获取模板信息】
> 位置:项目根目下新建文件夹(template\default\temp)
模板:三个模板文件(category.html;list.html;content.html)
获取:控制器中读取显示模板文件(代码如下)
~~~
$handler = opendir('../template/default/temp');
while( $file = readdir($handler)){
if($file != '.' && $file != '..'){
$files[]['name'] = $file;
}
}
$this->assign('filename',$files);
~~~
## 【插入数据调整信息:修改器】
~~~
protected $insert = ['addtime'];
//addtime修改器
protected function setAddtimeAttr($value){
return date('Y-m-d H:i:s');
}
~~~
## 【读取磁盘文件】
~~~
const newModelSql = './data/sfox_newmodel.sql';
$newModelSql = file_get_contents(self::newModelSql);
~~~
## 【获取模板文件名】
~~~
$handle = opendir('../template/default/temp/');
while ($file = readdir($handle)) {
if ($file != '.' && $file != '..') {
$files[]['name'] = $file;
}
}
~~~
- 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
- 窗体操作