Blogger Information
Blog 8
fans 0
comment 0
visits 7380
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
5.29 实例演示: 模板赋值、模板内容过滤替换、模板动态布局和模板继承技术
Allen的php博客
Original
897 people have browsed it

〓 控制器文件: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" /}


Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!