多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Niushop开源商城模板引擎 --- niushop采用thinkphp5框架中的模板引擎,不太熟悉thinkphp5框架的建议先学习一下这方面的知识 参考手册:[https://www.kancloud.cn/manual/thinkphp5/118122](https://www.kancloud.cn/manual/thinkphp5/118122) 下面niushop标准化的模板引擎说明: 模板所在目录:template wap端控制器:application/wap wap端所在目录:template/wap web端控制器:application/web web端所在目录:template/web web端和wap端都会有一个base控制器,基础功能都会继承它(例如:商品、订单、会员;支付、定时任务不会继承base控制器) 在初始化构造函数中会查询一些公共信息,例如,网站信息、SEO搜索引擎信息、默认图片、会员信息、分页、当前模板信息。 base控制器重写了view\(\)方法,在原有功能的基础上新增了一些常用变量,用于在模板中使用。以及ajaxApi\(\)方法,ajax异步请求数据接口、langApi\(\)ajax异步请求语言包接口。具体代码可以参考BaseWeb.php和BaseWap.php,在这里只展示部分比较重要的代码片段。 **ajax请求Api数据代码:** ```php public function ajaxApi(){ $method = input("method", ""); $param = input("param", ""); if (empty($method)) { return [ 'title' => "javascript调用api", 'data' => "", 'code' => -400, 'message' => "接口发生错误:method is not empty", ]; } if (!empty($param)) { $param = json_decode($param, true); } $res = api($method, $param); return $res; } ``` **ajax请求语言包接口:** ```php public function langApi(){ $data = input("data", ""); if (!empty($data)) { $data = explode(",", $data); //键值反转 $data = array_flip($data); foreach ($data as $k => $v) { $data[ $k ] = lang($k); } } return $data; } ``` **wap端view\(\)方法代码如下:** ```php protected function view($template = '', $vars = [], $replace = [], $code = 200){ $view_replace_str = [ 'WAP_CSS' => __ROOT__ . '/template/wap/' . $this->use_wap_template['value'] . '/public/css', 'WAP_FONT' => __ROOT__ . '/template/web/' . $this->use_wap_template['value'] . '/public/font', 'WAP_JS' => __ROOT__ . '/template/wap/' . $this->use_wap_template['value'] . '/public/js', 'WAP_IMG' => __ROOT__ . '/template/wap/' . $this->use_wap_template['value'] . '/public/img', 'WAP_PLUGIN' => __ROOT__ . '/template/wap/' . $this->use_wap_template['value'] . '/public/plugin', ]; } ``` 在此处要说明一下,$this->style是在Base控制器初始化构造函数中定义的,它代表的是当前所使用的模板,因为重写了view方法,所以在返回模板路径的时候,必须拼接上$this->style。 **控制器代码示例:** ```php public function index() { // title_before 为网页标题 $this->assign("title_before", "会员中心"); //$this->style 代表当前使用的模板 return $this->view($this->style . 'member/index'); } ``` **变量输出:** ```php $data['name'] = 'ThinkPHP'; $data['email'] = 'thinkphp@qq.com'; $view->assign('data',$data); ``` 接着就可以在模板中使用下面的方式输出,要用花括号包起来,具体语法参考TP5手册: ``` Name:{$data.name} Email:{$data.email} ``` **接口调用:** 基础接口都放在application/api下,调用格式为:System.控制器名称.功能模块 请求基础接口,写法如下:System.Member.memberInfo 对应位置:application/api/controller/Member.php/memberInfo\(\) 插件中的接口,调用格式为:插件名称.控制器名称.功能模块 请求插件里的接口,写法如下:NsMemberSign.MemberSign.getSignInConfig 对应位置:addons/NsMemberSign/api/controller/MemberSign.php/getSignInConfig\(\) 前台页面上调用数据可以通过以下两种方式: 第一种,在界面使用php标签: ```php {php} // 第二个参数为要传入的数据数组, $member_detail = api("System.Member.memberInfo",[]); {/php} ``` 第二种,使用common.js中的api\(\)函数 ```javascript api("System.Member.memberInfo", {}, function (res) { console.log(res); }); ```