一、模版输出
引入View类 使用视图方法display() 不通过模版 直接渲染内容 可以添加html标签
return View::display($name);
return View::display('我的姓名是:<span style="color: red">'.$name.'</span>');
fetch(模版表达式)
// 模版表达式:模块@控制器/操作方法
// 模版默认目录是 模块/view/控制器名/模版文件名(一般与操作方法同名)
// 模型文件的后缀一般为html,可以在config/template.php中修改
// fetch('模版表达式', [模版变量数组], [模版配置参数数组])
// 模版参数我们一般不再控制器里动态设定 而是在配置文件里设置
// 这里的模版表达式可以省略模块和控制器
// return View::fetch('index@index/demo1', ['name'=>$name]);
其实在controller类中有一个属性view,保存着视图类的实例化对象
// 所以要让index类继承controller类 然后实例化他就可以模版输出
// return $this->view->fetch('demo1', ['name'=>$name]);
// 通常可以省略view这个属性
// return $this->fetch('demo1', ['name'=>$name]);
// 框架也内置了助手函数 view() 在任何情况下都可用使用他 不用引入任何类
return view('demo1', ['name'=>$name]);
二、模版赋值
1.assign()使用他必须用view类,以后我们统一用cotroller类实例化调用
// View::assign('name', $name);
// return View::fetch();
// 2.传参数fetch() view()刚才演示过了
// 3.对象方式 通过controller类中的两个魔术方法实现数据注入
$this->view->name = $name;
// 同样的view可以省略
// $this->view->assign('name', $name);
// 如果按照默认规则创建的模版文件 那么就可以省略模版文件名
return $this->fetch();
三、模版过滤与替换
// tp51同之前的版本直接删除了模版字符串替换功能,改为模版配置参数来实现
// congfig/tmplate.php中更改
//字符过滤
// 'tpl_replace_str' => ['ji ming'=>'冀晓明']
$this->view->assign('name', 'ji ming');
$filter = function ($content) {
return str_replace('ji ming', '冀晓明', $content);
};
return $this->filter($filter)->fetch();
四、模版布局
//1、全局布局
//先在template.php中开启
/*//开启全局布局
'layout_on' => true,
//全局模版名
'layout_name' => 'layout',
//主体占位符
'layout_item' => '{__CONTENT__}'*/
//然后在view下建立public/header和footer 写出html样式 然后在view下新建lauout.html
{//网站头部}
{include file="public/header" /}
{//网站主体}
{__CONTENT__}
{//网站尾部}
{include file="public/footer" /}
//其中{__CONTENT__}是占位符 demo4里面的html内容重写网站主题内容
//2、模版标签
//不需要在配置中开启全局布局 也不需要配置任何
//需要在布局模版的模版文件中添加标签{layout name="layout" /}
//3、在控制器动态配置
//不需要配置 不需要添加任何标签
//布局模版还是要实现准备好的
//直接调用:$this->view->engine->layout(true);
//需要所有都是默认的 'layout_item'=>'{__CONTENT__}' 'layout_name'=>'layout'
// $this->view->engine->layout(true);
// return $this->view->fetch();
// 可以简化成一行 但是没有参数是错误的
// return $this->view->engine->layout(true)->fetch();
// 参数应该是完整的模版表达式
// return $this->view->engine->layout(true)->fetch('index@index/demo4');
// 表达式可以简写 但是不可以省略控制器
// return $this->view->engine->layout(true)->fetch('index/demo4');
// 关闭模版布局
// return $this->view->engine->layout(false)->fetch('index/demo4');
//自定义模版 layout可以是任意的布局模版 被替换的内容标识符也可以替换
return $this->view->engine->layout('layout')->fetch('index@index/demo4');
五、模版继承
//在view层下新建base.html作为父模版
//在父模版里只有{block name=""}{/block}里面的才能显示
//子模版中直接用{extend name="" /}
return $this->view->fetch();
六、常用标签及分页功能
{// 模版中两种注释的区别}
{// 这种在源码中看不到}
<!--这种在源码中可以看到哦-->
{//其实模板可以绕过控制器,直接获取数据}
{//assign标签可以在模板中直接定义变量}
{//assign name="staffs" value=":\app\index\model\Staff::where('salary', '<', 3000)->select()" /}
{//name值的获取过程可以用助手函数model进行简化,这也是推荐的方式}
{assign name="staffs" value=":model('staff')::where('salary', '<', 1)->select()" /}
{//assign name="staffs" value=":model('staff')::all()" /}
{// 一、 foreach标签 类似于原生的foreach语句}
<!--{//foreach $staffs as $staff}
<tr>
<td>{//$staff.id}</td>
<td>{//$staff.name}</td>
<td>{//$staff.sex}</td>
<td>{//$staff.age}</td>
<td>{//$staff.salary}</td>
</tr>
{// /foreach}-->
{//二、volist循环标签 使用最广泛 参数最多 功能强大}
{//基本用法 name="变量名,与控制器相符不可更改" id="循环变量 可自定义"}
{//volist name="staffs" id="staff"}
{//扩展用法 获取指定范围内的数据信息 offset="起始索引" length="数据数量"}
{//volist name="staffs" id="staff" offset="0" length="2"}
{//扩展用法 获取数据的奇偶行 mod="2" 数据索引除以2得到的商在判断}
{//eq 上面除以2得到商为1是偶数 例如3为第四个数据 余数是1}
{//volist name="staffs" id="staff" length="10" mod="2"}
{//eq name="mod" value="1"}
<!--<tr>
<td>{//$staff.id}</td>
<td>{//$staff.name}</td>
<td>{//$staff.sex}</td>
<td>{//$staff.age}</td>
<td>{//$staff.salary}</td>
</tr>-->
{///eq}
{///volist}
{//三、 扩展用法 数据集合为空}
{//volist name="staffs" id="staff" empty="没有数据"}
{//这种的很少用 一般都用的是empty标签}
{empty name="staffs"}
<h3 style="color: #c7254e">没有任何数据</h3>
{else /}
{volist name="staffs" id="staff"}
<tr>
<td>{$staff.id}</td>
<td>{$staff.name}</td>
<td>{$staff.sex}</td>
<td>{$staff.age}</td>
<td>{$staff.salary}</td>
</tr>
{/volist}
{/empty}
{///volist}
范围取值及分页
{foreach name="staffs" id="staff"}
<tr>
<td>{$staff.id}</td>
<td>{$staff.name}</td>
<td>
{// in 里面的值是离散的 意思就是一个个的}
{in name="staff.sex" value="0,1"}
{if $staff.sex == 1}
男
{else /}
女
{/if}
{/in}
</td>
<td>
{//$staff.age}
{// between 里面的值是连续的}
{between name="staff.age" value="20, 30"}
很年轻
{/between}
{between name="staff.age" value="31, 55"}
正值壮年
{/between}
{between name="staff.age" value="56,70"}
最美夕阳红
{/between}
{between name="staff.age" value="70,100"}
不服老不行
{/between}
</td>
<td>{$staff.salary}</td>
</tr>
{/foreach}
</table>
<div class="text-center">{$page|raw}</div>