多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ***** 模板二开可以参考官方开发的两套模板插件(diy_default1、diy_default2) ![](https://img.kancloud.cn/d9/88/d988865cbcf6b47b7f6b475f33ce08d8_961x640.png) # 自定义模板开发 ## **后端** 创建插件,此处命名为:my_template 目录结构如下: ``` │ ├─my_template 模板插件名称 │ │ ├─component 组件目录 │ │ │ ├─controller 组件控制器目录 │ │ │ │ ├─Text.php 文本组件控制器 │ │ │ ├─view │ │ │ │ ├─text 文本组件目录 │ │ │ │ │ ├─css 样式文件 │ │ │ │ │ ├─img 图片资源 │ │ │ │ │ ├─js 脚本文件 │ │ ├─config │ │ │ ├─diy_view.php 存放自定义组件、链接等数据结构 │ │ │ ├─event.php 事件钩子 │ │ │ ├─info.php 插件信息 │ │ ├─event 事件执行目录 │ │ │ ├─DiyIcon.php 扩展自定义图标库 │ │ │ ├─TemplateInfo.php 自定义模板信息钩子 │ │ │ ├─UseTemplate.php 使用自定义模板钩子 │ │ ├─shop │ │ │ │ ├─view │ │ │ │ │ ├─public │ │ │ │ │ │ ├─css │ │ │ │ │ │ │ ├─comp_iconfont.css 组件图标样式文件 │ │ │ │ │ │ │ ├─diy_iconfont.css 自定义图标库样式文件 │ │ │ │ │ │ ├─img 模板所用到的图片资源 │ │ │ │ │ │ │ ├─cover.png 模板封面图 │ │ │ │ │ │ │ ├─preview.png 模板预览图 ``` ### diy_view.php(定义自定义组件、链接等数据结构) * [ ] 组件类型: * SYSTEM:基础组件 * PROMOTION:营销组件 * EXTEND:扩展组件 * [ ] 推荐在[JSON格式化工具](https://qqe2.com/)中定义数据结构 * [ ] 定义数据结构时要注意以下事项: * 字段命名要`简短`、多个单词要使用`小驼峰式命名法`,例如:text、color、goodsIds、subTitle * 跳转链接对象不能设置为空,里面至少要有一个字段,例如: 错误写法:"link" : {} **正确写法:"link" : { "name" : "" }** * **定义颜色字段时建议大写并且保留6位数**,例如:#999999、#FFFFFF、#303133,不推荐使用缩写,后台装修时会看到颜色值闪动,#999—>#999999 * 组件的数据结构如下: ``` { "text": "我是扩展文本组件", "link": { "name": "" }, "color": "#303133", "goodsIds": [] } ``` ### component ``` <?php return [ 'util' => [ [ 'name' => 'TextExtend', // 组件控制器名称 'title' => '扩展文本', // 组件名称 'type' => 'EXTEND', // 组件类型 'value' => '{"text":"我是扩展文本组件","link":{"name":""},"color":"#303133","goodsIds":[]}', // 数据结构 'sort' => '50000', // 排序号范围:50000~60000 'support_diy_view' => '', // 支持的自定义页面(为空表示公共组件都支持) 'max_count' => 0, // 限制添加次数,0表示可以无限添加该组件 'is_delete' => 0, // 组件是否可以删除,0 允许,1 禁用 'icon' => 'icon-wenben', // 组件字体图标 ], ], 'link' => [] ]; ``` ### 模板信息 文件路径:**event/TemplateInfo.php** 代码如下: ``` <?php namespace addon\my_template\event; /** * 自定义模板信息 */ class TemplateInfo { /** * 模板数据 * @param $params * @return array */ public function handle($params) { if ($params[ 'name' ] == '' || $params[ 'name' ] == '模板标识') { $use_template = new UseTemplate(); $info = [ 'title' => '模板名称', 'name' => '模板标识', 'cover' => __ROOT__ . '/addon/my_template/shop/view/public/img/cover.png', 'preview' => __ROOT__ . '/addon/my_template/shop/view/public/img/preview.png', 'desc' => '这里填写模板描述', 'page' => $use_template->getIndexPage(), // 设置要编辑第一个的页面 'price' => 0, // 模板价格 ]; return $info; } } } ``` ### 使用自定义模板 ``` namespace addon\my_template\event; use app\model\web\DiyView as DiyViewModel; /** * 使用自定义模板 */ class UseTemplate { /** * 模板数据 * @param $params * @return array */ public function handle($params) { if ($params[ 'name' ] == 'official_default_round') { $diy_view = new DiyViewModel(); // 添加模板页面 $res = $diy_view->addTemplatePage([ 'site_id' => $params[ 'site_id' ], 'name' => $params[ 'name' ], 'page' => [ $this->index_page, $this->goods_category_page ], // 自定义页面集合 ]); return $res; } } // 定义自定义页面数据 private $index_page = []; private $goods_category_page = []; // 可以自行添加更多的自定义页面,要加入到page集合中,如下 private $promote_page = []; private $micro_page = []; } ``` ### 定义组件 组件结构 文件路径:`config/diy_view.php` xxxxxxxxxx ### 定义自定义链接 xxxxxxxxxx ### 扩展图标库 xxxxxxxxxx ## 组件 定义组件结构 ### 前端 uni-app # 固定模板开发