博客列表 >5.29 实例演示: 模板赋值、模板内容过滤替换、模板动态布局和模板继承技术

5.29 实例演示: 模板赋值、模板内容过滤替换、模板动态布局和模板继承技术

Allen的php博客
Allen的php博客原创
2018年05月30日 16:38:48896浏览

〓 控制器文件:application\index\controller\index.php

1.png

<?php

/医院

 * 知识点:视图渲染、模板赋值、模板过滤与替换、模板布局、模板继承

 */

namespace app\index\controller;


//use think\facade\View; //视图类静态代理:将内部方法全部看做静态进行调用

use think\Controller; //模板渲染更常用的方法,导入Controller基类


class Index extends Controller

{

    public function index()

    {

        return '欢迎来到首页!';

    }


    //模板渲染

    public function  demo1()

    {

        $name = 'Allen';

        //模板渲染方法1:使用视图类的display()来直接渲染内容

        return View::display('我是'.$name);


        //模板渲染方法2:fetch('模板表达式')指定一个模板进行内容输出

        //use think\facade\View; 视图类静态代理:将内部方法全部看做静态进行调用

        //模板表达式:模块@控制器/操作方法

        //模板以模块view目录为根目录

        return View::fetch('index@index/demo1',['name'=>$name]);


        //模板渲染方法3:这是更常用的方法

        //需要导入think\Controller,并集成Controller基类

        //建议通过$view属性实例来调用

        return $this->view->fetch('index@index/demo1',['name'=>$name]);

        //可以跳过$view属性调用fetch()

        return $this->fetch('index@index/demo1',['name'=>$name]);

        //因为我们目前用的默认规则来定位模板的,通过assgin(模板变量名,值)赋值

        $this->assign('name', $name); //赋值

        return $this->fetch();


        //模板渲染方法4:通过助手函数view(),不依赖任何类

        return view('demo1',['name'=>$name]);


    }


    //模板赋值

    public function demo2()

    {

        //1. 方法赋值:assign(模板变量名,值)

        $age = 28;

        $salary = 5000;

        $this->assign('age', $age);


        //2. 传参赋值:fetch('模板',[参数数组])

        //3. 对象赋值:

        $this->view->salary = $salary;


        return $this->view->fetch();

    }


    //模板过滤与替换

    public function demo3()

    {

        //tp51之前,直接删除了替换功能,采用config/template.php进行配置

        //将模板中的 'Allen' 替换成:刘德华

        //注意:模板中不能存在未赋值的的输出变量,否则报错

        $this->view->name = 'Allen';

        $this->view->age = '30';

        $this->view->salary = '5000';


        //通过filter()传入闭包,来替换数据

        $filter = function($content){

            return str_replace('Allen','刘德华',$content);

        };

        $this->filter($filter);

        return $this->view->fetch();


    }


    //模板布局

    public function demo4()

    {

        /医院

         * 一:全局配置

         * 1. 在config/template.php中配置

         * //模板布局的配置

         * 'layout_on' => true, //开启模板布局

         * 'layout_name' => 'layout' //指定模板布局文件

         * 步骤:1. 在application模块中view目录创建layout.html

         *      2. 在view目录中创建public公共目录,用来存放公共文件header.html/footer.html

         *

         * 二:模板标签进行配置

         * 1. 不依赖于全局配置,在模板中直接用标签进行控制

         * 2. {layout name="layout" /},只在当前模板引用,其他模板不引用

         *    {//layout name="layout" /}, 注释模板布局标签

         *    {__NOLAYOUT__}, 禁用模板布局标签

         *

         * 三:动态配置

         * 1. 不需要再模板配置文件中进行任何配置

         * 2. 不需要再单签模板中添加任何标签

         *

         * 步骤:

         * 1. 开启布局:$this->view->engine->layout(true);

         * 2. 自定义布局:$this->view->engine->layout('layout','{__TEXT__}')

         *    对应的模板中修改为:{__TEXT__}

         */

        $this->view->engine->layout(true);

        return $this->view->fetch();


        /医院

         * 以上105行和106行进行合并简写语法:

         * $this->view    //调用视图对象

         * ->engine       //模板引擎对象

         * ->layout(true) //开启模板布局

         * ->fetch('index\demo4');     //模板渲染,合并语法fetch()必须带参数,至少给到控制器级别

         */



    }


    //模板继承

    public function demo5()

    {

        /医院

         * 步骤:

         * 1. 创建view/base.html,基础模板,供其他子模板进行继承

         * 2. base.html 内容全部要用标签{block}进行定义

         * 3. 子模板中使用{extend name="public/base" /}继承父模板

         *

         * 技巧:

         * 1. 引用父模板中的内容,在子模板中直接使用{__block__}

         * 2. 父模板的区块,子模板中没有,会照样输出

         * 3. 在子模板中,凡是写在block区块之外的内容,直接被忽略

         * 4. 不计block区块顺序

         */

        return $this->view->fetch();

    }


}



〓 视图view目录的模板文件:application\index\view\index

2.png

◇ demo1.html:


<h1>我的名字是:{$name},很高兴认识你!</h1>


◇ demo2.html:


<h1>大家好,我是Allen,我今年:{$age}岁了。我的工资是:{$salary}</h1>


◇ demo3.html:


<h1>大家好,我是{$name},我今年:{$age}岁了。<br/>我的工资是:{$salary}</h1>


◇ demo4.html:


<style type="text/css">

    .main{

        width:1100px;

        height: 300px;

        margin:0 auto;

        background: #cccc77;

        text-align:center;

        line-height:150px;

    }

</style>

<div class="main">网站主体</div>


◇ demo5.html:


{//继承基础模板}

{extend name="public/base" /}


{//将父模板内容重写}

{block name="main" /}

<div style="margin:50px auto;width:1100px;height:100px;text-align:center;">父模板的main块,在子模板中被重写了</div>

{/block}


{//引用父模板内容}

{block name="course" /}

<div style="margin:0 auto;width:1100px;height:100px;text-align:center;">{__block__}PHP</div>

{/block}



〓 视图view目录的模板公共文件:application\index\view\public

3.png

◇ base.html:


{//基础模板中只允许block标签}


{block name="header"}

    {include file="public/header" /}

{/block}


{block name="main" /}

<div style="margin:50px auto;width:1100px;height:100px;text-align:center;">这是基模板的main块</div>

{/block}


{block name="course" /}课程名称:{/block}


{block name="footer"}

    {include file="public/footer" /}

{/block}


◇ header.html:


<style type="text/css">

    .header{

        width:1100px;

        height:200px;

        margin: 0 auto;

        background: wheat;

        text-align:center;

        line-height:100px;

    }

</style>

<div class="header">网站头部</div>


◇ footer.html:


<style type="text/css">

    .footer{

        width:1100px;

        height:200px;

        margin: 0 auto;

        background: wheat;

        text-align:center;

        line-height:100px;

    }

</style>

<div class="footer">网站底部</div>



〓 指定的模板布局文件:application\index\view\layout.html


{include file="public/header" /}

{__CONTENT__}

{include file="public/footer" /}


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议