<!-- 浏览方式:看云粘贴进去 -->
[文档浏览链接](https://www.kancloud.cn/loqhcn/mulo_code/1352556)
[TOC]
# 概述
主要实现通过几
# 文档规则
@/ = 对应控制器/模块/
# 通用增删改查说明
## 使用:
1,继承 \app\common\BaseCURD
2,在初始化前置操作中
```php
use app\web\model\NewsModel;
public function initialize()
{
$this->model = new NewsModel();
parent::initialize();
}
```
## 继承属性
```php
//当前操作模型 由子类实例化
protected $model = null;
//页面大小
protected $psize = 10;
//搜索列
protected $searchRow = "title";
//排序字段
protected $sortRow = "id";
//排序方式
protected $sortType = 'desc';
//操作后跳转链接
protected $addGoUrl = 'index';
//保存数据后跳转到方法
protected $updateGoUrl = 'index';
```
## 继承方法
# 列表页
url: /controller/module/index
veiw: @/index.html
## 创建一个列表页
> 创建对应控制器的index.html模板文件 , 这是一个
```php
<extend name="default@index_base" />
<block name="rowtitle">
<th>ID</th>
<th>名称</th>
<th>创建时间</th>
<th>状态</th>
<th width="180">{:lang('ACTIONS')}</th>
</block>
<block name="row">
<tr id='' style=''>
<td>{$vo.id}</td>
<td>{$vo.name}</td>
<td>{:date('Y-m-d H:i:s',$vo['create_time'])}</td>
<td>
<switch name="$vo['state']">
<case value="1">正常</case>
<case value="2">失效</case>
</switch>
</td>
<td>
<a class="btn btn-xs btn-primary" href="{:url('edit',array('id'=>$vo['id']))}">{:lang('EDIT')}</a>
<a href="{:url('del',array('id'=>$vo['id']))}"
class="btn btn-xs btn-danger js-ajax-delete">{:lang('DELETE')}</a>
</td>
</tr>
</block>
```
## 搜索和筛选
- 通过配置实现列表页搜索筛选功能
```php
//搜索和筛选配置
protected $indexToolConfig = [
//false:关闭, String:搜索框文字
'search' => true,
// 时间筛选,时间筛选字段
'time'=>true,
'time_field'=>'get_time',
//状态筛选配置
'selects' => [
['type' => 'select', 'name' => 'state', 'title' => '广告状态', 'values' => ['-1' => '不限', '1' => '正常', '2' => '禁用']],
],
];
//搜索的列 逗号分隔
protected $searchRow = "title";
```
## 钩子函数
- 控制器内继承对应的函数实现那些功能
> index页面渲染前 用于数据处理
```php
protected function beforeIndexRender(&$list){
}
```
> 自定义列表数据
```php
/** 自定义列表数据查询
* @param [type] $wheres
* @return Model::paginate()
*/
function indexListData($wheres)
{
//关联用户查询示例 * 用了别名后,搜索和筛选需要单独处理
return $this->model->alias('o')->join(['zoo_member' => 'm'])
->field('o.*,m.mobile')
->order("o.order_id {$this->sortType}")
->paginate($this->psize);
}
```
## 导出excel
```php
protected function export($data)
{
foreach ($data as $key => &$li) {
$li['get_time'] = date('Y-m-d H:i:s',$li['get_time']);
$li['use_time'] = $li['use_time']?date('Y-m-d H:i:s',$li['use_time']) : '-';
}
unset($li);
$exportTime = date('Y年m月d日 H:i:s');
return $this->exportExcel_1("{$exportTime}",[
'name'=>'名称',
'get_time'=>'获得时间',
'use_time'=>'使用时间',
'mobile'=>'使用者手机号'
],$data);
}
```
# 编辑 or 添加
添加 /controller/module/post
修改 /controller/module/post?id=x
对应模块目录/post.html *编辑和修改
##模板页面
## 钩子函数
- 继承下列函数实现对数据操作
```php
```
## 添加和编辑的模板分离
## 图片上传
```html
<tr>
<th>展示图片:</th>
<td class="col-sm-8">
<php>
$include_uploadimg_param = [
'name' => 'ad_pic',
'img_name' => isset($row['ad_pic']) && $row['ad_pic']? $row['ad_pic']:'',
'img' => isset($row['ad_pic']) && $row['ad_pic']? cmf_get_image_preview_url( $row['ad_pic'] ):''
];
</php>
<include file="web@uploadimg" />
<span id="err_attr_name" style="color:#F00; ">图片不能超过1M</span>
</td>
</tr>
```
## radios
```html
<tr>
<th>状态:</th>
<td>
<php>
$include_radios_param = [
'list'=>[
['name'=>'正常','val'=>'1'],
['name'=>'隐藏','val'=>'2']
],
'name'=>'state',
'checked'=>$id?@$row['state']:2,
];
</php>
<include file='web@public/radios' />
</td>
</tr>
```
# 删除
url: @/del 或者 @/delete
## 自定义删除
```php
//继承删除操作函数
protected function onDelete($id)
{
return $this->model->where('表主键', $id)->update([
'isdel' => 1
]);
}
```
# 常用复制
## 页面控制器
```php
<?php
namespace app\web\controller;
use cmf\controller\AdminBaseController;
use app\web\WebBaseCURD;
use app\web\model\StoreStyleModel;
class StoreStyleController extends WebBaseCURD
{
//搜索列
protected $searchRow = "name";
//排序字段
protected $sortRow = "sorting";
//模块名称
protected $moduleName = '门店风格';
public function initialize()
{
$this->model = new StoreStyleModel();
parent::initialize();
}
/**
* 添加或者更新的时候 输入数据
*
*/
function validateRule()
{
$rule = [
'name|风格名称' => 'require|max:60',
'pic|图片' => 'require|max:255',
'store_style|门店风格' => 'require',
'state|显示状态' => 'require',
];
return $rule;
}
}
```
- 内容说明
- git的使用
- 常用复制
- mysql
- uniapp
- 学习记录
- 序言 导航栏目
- 1, css flex布局学习
- vscode插件开发
- Yaf框架使用
- 代码编辑器使用
- 企业运营
- vue组件项目使用markdown作为文档
- 使用gulp
- 待学习内容
- 常用业务逻辑
- 定时任务
- 多语言
- 微信支付
- 视频处理
- excel导出导入
- php
- 架构
- 配置
- sysconfig
- 微擎二次开发
- 人人商城后台开发
- 后台管理-菜单权限
- 一些建的表
- 常用
- form
- 常用函数
- 人人商城开发
- FoxUI
- 插件二次开发
- 资金
- 注册推荐人
- 基本
- 后台开发
- thinkcmf-curd
- apis
- thinkcmf
- fastadmin
- swoole
- thinkphp使用swoole
- composer
- 开发composer包
- 错误记录
- laraval框架
- php跨域问题
- nginx
- apache
- EasySwoole的使用
- 学习笔记1
- thinkphp6
- 文件上传
- mysql
- 存储过程
- 日志查询 binlog
- 数据库优化
- php调试
- 开源项目二次开发笔记
- 禾匠
- 订单
- 测试接口
- 知识体系
- php遇到的错误
- php8新特性
- 快速开发-基础包-文档
- vue-open-pc基础架构
- 序言
- 页面创建
- axios接口调用
- vue-open-mobile基础结构
- 序言
- 微擎-应用市场
- mulo-admin-tp
- zoo-admin
- 基础增删改查
- 列表页
- curd
- Popup弹出层
- 项目架构
- 微服务
- nginx
- 常用命令
- 配置说明
- 配置负载均衡
- 代理内网数据库
- 限流
- 变量
- nginx语法
- 项目管理
- 测试体系
- 压力测试
- Jenkins
- 开发环境构建
- 服务器
- linux系统
- linux常用命令
- 日志系统
- 自动化部署
- 宝塔webhook
- 项目部署
- 大数据
- hadoop
- HBase 亿级数据的分布式非关系型数据库
- MaxCompute 阿里云云计算数据库
- Hive 数据库for hadoop
- redis
- linux
- 部署环境常用
- 个人开源npm包-文档
- mulo-test
- mulo-cli包 构建工具
- 命令说明
- mulo-tools 常用js工具整合
- Url
- 辅助函数
- jsx
- FileSystem
- mulo-codes包 我的常用代码 演示包
- mulo-validate 验证类函数
- vscode-codes包 vscode代码片段
- phpdefault
- js
- php-thinkcmf
- mulo-ui
- 代码高亮实现
- 文档功能实现
- css包规则
- mulo
- mulo-admin
- 列表页组件
- 列表页组件-筛选
- vue插件
- npm包学习和使用
- Markdown-it解释器
- cp-cli文件,文件夹复制
- remark markdown的插件
- transliteration 文字转换为拼音
- 常用包
- lerna 代码git库耦合度
- lodash
- web全栈
- vite
- web应用性能优化
- vue3
- vue3组件开发
- 构建工具
- rollupjs
- 前端常见问题
- 创建跨域代理服务
- 背景精灵图制作
- js导出导入excel
- gulp构建工具
- 使用gulp打包scss
- gulp-autoprefixer根据浏览器处理前缀
- gulp-cssmin压缩css
- gulp+browser-sync前端自动化
- 使用记录
- webpack的使用
- 2019年11月4日实战记录
- 2019年11月4知识点
- 浏览器自动刷新 webpack-dev-server
- 被坑日记
- 使用eleme的md加载器
- 加载资源
- 自定义loader
- 使用记录
- 开发library
- 使用jsx
- 动态打包
- vue
- cli3
- 常用复制
- 常用插件的使用
- jquery
- vux状态管理
- [组件库]mint-ui饿了么
- [上拉加载]模块
- bootstrap框架引入
- sass样式
- axios数据交互
- swiper幻灯片插件
- storejs本地存储插件
- vuet状态管理(vux的简化版)
- nuxt服务端渲染
- 基础使用
- vue与后台交互数据
- 创建项目
- 使用常见问题
- 前后端分离权限认证方案
- 使用记录-遇到的问题
- 组件开发
- vue知识map
- 常用组件库
- dev tool
- 常用组件库整理
- angular
- 学习记录-2017
- css样式
- bootstrap笔记
- css3使用
- 使用记录
- 动画
- css单位
- 实例代码
- 悬浮窗
- 被坑日记
- 贝塞尔曲线
- javascript
- javascript高级使用
- javascript写法收集
- 代码记录
- jquery的使用
- 发送验证码倒计时
- js实现addclass removeclass
- 基础
- ES6的新特性
- javascript遇到的坑
- nodejs
- 优秀开源项目
- [框架]express
- 基础
- test
- 进程管理
- knexjs 查询构建
- mogodb
- npm
- 开发npm包
- 开发全局包-命令行工具
- 开发细节记录
- 使用记录
- npm包的依赖说明
- 命令说明
- typescript
- 入门
- typescript基础
- 声明文件呢 types .d.ts
- uni-app
- 使用记录
- 采坑日记
- web技术点
- html meta标签的常用定义
- 强制跳转到https
- 开发library
- babel编译器
- websocket
- socket.io
- CDN
- 正则使用记录
- 创建技术文档
- sveltejs框架
- 测试
- 测试说明
- e2e UI测试
- 参考
- ava
- vue测试
- pc应用electron.js
- 开发资源
- Flutter
- python
- bui
- eslint
- 云开发
- uniCloud
- app开发
- apicloud-app开发
- 常用复制
- uni-app
- 游戏开发
- phaser 2d游戏框架
- 1 基本学习 ,创建游戏,场景,加载资源
- 2 摄像机,舞台,世界,缩放控制
- 3 显示对象,图片 图形 按钮 精灵
- 4 其他
- 5 文字
- 6 组
- 7 动画
- 8,atlas的制作和使用,
- 我的composer包
- mulo-app 应用常用类库
- 更多知识随手记一下
- 教育法
- 物联网
- 51单片机
- arduino单片机
- 被坑日记
