赞
踩
视图功能由\think\View
类配合视图驱动(模板引擎)类一起完成
1 视图实例化
(1) 控制器里调用视图类的方法
如果你的控制器继承了\think\Controller
类的话,则无需自己实例化视图类
return $this->fetch(); // 渲染模板输出
下面的方法可以直接被调用
PS 如果需要在控制器里调用View类的其它方法,可以直接使用 $this->view
得到view对象
(2) 直接实例化视图类(很少使用)
$view = new think\view();
(3) 助手函数view()
return view('hello',['name'=>'thinkphp']);
2 内置模板引擎
配置文件
- 'template' => [
-
- 'type' => 'Think', // 模板引擎类型 支持 php think 支持扩展
-
- 'view_path' => './template/', // 模板路径
-
- 'view_suffix' => 'html', // 模板后缀
-
- 'view_depr' => DS, // 模板文件名分隔符
-
- 'tpl_begin' => '{', // 模板引擎普通标签开始标记
-
- 'tpl_end' => '}', // 模板引擎普通标签结束标记
-
- 'taglib_begin' => '{', // 标签库标签开始标记
-
- 'taglib_end' => '}', // 标签库标签结束标记
-
- ],
视图文件的根目录默认情况下位于模块的view
目录,每个模块的视图目录可以通过模板参数view_path
自定义
3 模板赋值
- $this->assign('name','ThinkPHP'); // 模板变量赋值
-
- return $this->fetch('index', [
-
- 'name' => 'ThinkPHP',
-
- ]);
-
- 或者
-
- return $this->display($content, [
-
- 'name' => 'ThinkPHP',
-
- ]);
-
- //如果使用view助手函数渲染输出
-
- return view('index', [
-
- 'name' => 'ThinkPHP',
-
-
- //支持在任何地方使用静态方法进行模板变量赋值
-
- think\View::share('name','value');
4 模板渲染
fetch('[模板文件]'[,'模板变量(数组)'])
用法 | 描述 |
---|---|
不带任何参数 | 自动定位当前操作的模板文件 |
[模块@][控制器/][操作] | 常用写法,支持跨模块 |
完整的模板文件名 | 直接使用完整的模板文件名(包括模板后缀) |
自定义模板文件的位置
- return $this->fetch('./template/public/menu.html');
-
- 这种方式需要带模板路径和后缀指定一个完整的模板文件位置,要注意模板文件位置是相对于应用的入口文件,而不是模板目录。
渲染内容 直接解析内容而不通过模板文件的话
return $this->display($content,$vars);
5 模板输出替换
内置输出替换变量
D:/eclipse_work1/game.test.com/cppserver/webRoot/../ __STATIC__ __JS__和__CSS__,__URL__
局部替换 支持对视图输出的内容进行字符替换
- public function index()
-
- {
-
- $this->assign('name','thinkphp');
-
- return $this->fetch('index',[],['__PUBLIC__'=>'/public/']);
-
- }
全局替换的话,可以直接在配置文件中添加
- 'view_replace_str' => [
-
- '__PUBLIC__'=>'/public/',
-
- 'D:/eclipse_work1/game.test.com/cppserver/webRoot/../' => '/',
-
- ]
助手函数view
也支持全局配置参数view_replace_str
的设置
- return view('index',['name'=>'thinkphp'],['__PUBLIC__'=>'/public/']);
-
-
模板文件定义
视图目录/控制器名(小写)/操作名(小写)+模板后缀
模板渲染规则
模板渲染使用\think\View
类的fetch
方法渲染规则为
- return $view->fetch(); [模板文件目录]/当前控制器名(小写+下划线)/当前操作名(小写).html
-
- return $view->fetch('add'); [模板文件目录]/当前控制器名(小写+下划线)/add.html
-
- return $view->fetch('user/add'); [模板文件目录]/user/add.html
-
- return $view->fetch('admin@user/add'); 跨模块调用模板
3 变量输出
- $view = new View();
-
- $view->name = 'thinkphp';
-
- return $view->fetch();
然后就可以在模板中使用
然后就可以在模板中使用
如果是数组变量
- $data['name'] = 'ThinkPHP';
-
- $data['email'] = 'thinkphp@qq.com';
-
- $view->assign('data',$data);
在模板中我们可以用下面的方式输出
- Name:{$data.name}
-
- 或者
-
- Email:{$data['email']}
如果是一个对象
如果是一个对象
4 系统变量输出
支持输出 $_SERVER
、$_ENV
、 $_POST
、 $_GET
、 $_REQUEST
、$_SESSION
和 $_COOKIE
变量
- {$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
-
- {$Think.session.user_id} // 输出$_SESSION['user_id']变量
-
- {$Think.get.pageNumber} // 输出$_GET['pageNumber']变量
-
- {$Think.cookie.name} // 输出$_COOKIE['name']变量
常量输出
- {$Think.const.APP_PATH}
-
- {$Think.APP_PATH}
配置输出
{$Think.config.default_module}
语言变量
{$Think.lang.page_error}
5 请求参数
- {$Request.get.id} // 调用Request对象的get方法
-
- {$Request.param.name} // 调用Request对象的param方法
-
- {$Request.param.user.nickname} // 调用Request对象的param方法
-
- {$Request.root} // 调用Request对象的root方法
-
- {$Request.root.true} // 调用Request对象的root方法,并且传入参数true
-
- {$Request.path} // 调用Request对象的path方法
-
- {$Request.module} // 调用Request对象的module方法
-
- {$Request.controller} // 调用Request对象的controller方法
-
- {$Request.action} // 调用Request对象的action方法
-
- {$Request.ext} // 调用Request对象的ext方法
-
- {$Request.host} // 调用Request对象的host方法
-
- {$Request.ip} // 调用Request对象的ip方法
-
- {$Request.header.accept-encoding} // 调用Request对象的header方法
6 使用函数
- {$data.name|md5}
-
- {$create_time|date="y-m-d",###}
-
- {$data.name|substr=0,3}
-
- {$name|md5|strtoupper|substr=0,3}
7 使用默认值
- {$user.nickname|default="这家伙很懒,什么也没留下"}
-
- {$Think.get.name|getName|default="名称为空"} 默认值和函数可以同时使用
8 使用运算符
我们可以对模板输出使用运算符,包括对“+”“-” “*” “/”和“%”的支持
9 三元运算符
{$status? '正常' : '错误'}
10 原样输出
可以使用literal
标签来防止模板标签被解析
{literal}Hello,{$name}!{/literal} //{$name}标签被literal标签包含,因此并不会被模板引擎解析,而是保持原样输出。
11 模板注释
- {/* 注释内容 */ } 或 {// 注释内容 } 单行注释
-
- {/* 这是模板 模板注释在生成编译缓存文件后会自动删除,这一点和Html的注释不同。
- 注释内容*/ } 多行注释
12 包含文件
模版表达式的定义规则为:模块@控制器/操作
- {include file="public/header" /} // 包含头部模版
-
- {include file="public/menu" /} // 包含菜单模版header
-
- {include file="blue/public/menu" /} // 包含blue主题下面的menu模版
-
- {include file="public/header,public/menu" /} // 可以一次包含多个模版
-
- {include file="../application/view/default/public/header.html" /} 直接包含一个模版文件名
-
- {include file="Public/header" title="$title" keywords="开源WEB开发框架" /} 在包含的header.html文件里面使用title和keywords变量
13 内置标签
volist标签
- {volist name="list" id="vo"}
-
- {$vo.name}
-
- {/volist}
foreach标签
- {foreach $list as $vo}
-
- {$vo.name}
-
- {/foreach}
for标签
{for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" }{/for}
比较标签
- {eq name="name" value="value"}value{/eq}
-
- {eq name="name" value="value"}相等{else/}不相等{/eq}
switch标签
- {switch name="变量" }
-
- {case value="值1" break="0或1"}输出内容1{/case}
-
- {case value="值2"}输出内容2{/case}
-
- {default /}默认情况
-
- {/switch}
if标签
- {if condition="($name == 1) OR ($name > 100) "} value1
-
- {elseif condition="$name eq 2"/}value2
-
- {else /} value3
-
- {/if}
in和notin
{in name="id" value="1,2,3"}id在范围内{/in}
between 和notbetween
{between name="id" value="1,10"}输出内容1{/between}
资源文件加载
- {load href="/static/js/common.js" /}
-
- {load href="/static/js/common.js,/static/css/style.css" /}
-
- {js href="/static/js/common.js" /}
-
- {css href="/static/css/style.css" /}
使用php标签
{php}echo 'Hello,world!';{/php}
assign标签
{assign name="var" value="123" /}
define标签
{define name="MY_DEFINE_NAME" value="3" /} 用于在模板中定义常量
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。