# 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);
});
```