# Niushop開源商城模板引擎
---
niushop采用thinkphp5框架中的模板引擎,不太熟悉thinkphp5框架的建議先學習一下這方面的知識
參考手冊:[http://www.hmoore.net/manual/thinkphp5/118122](http://www.hmoore.net/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);
});
```