博主信息
博文 8
粉丝 0
评论 0
访问量 8859
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
5.29 实例演示: 模板赋值、模板内容过滤替换、模板动态布局和模板继承技术
Allen的php博客
原创
1141人浏览过

〓 控制器文件: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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学