博客列表 >模板赋值、替换和过滤、布局、继承--5.29作业

模板赋值、替换和过滤、布局、继承--5.29作业

弓长木子的博客
弓长木子的博客原创
2018年05月30日 16:45:16798浏览
实例
<?php 
namespace app\index\controller;
use think\facade;
use think\Controller;

class Index extends Controller{

    //模板赋值
    public function demo2(){

        //方法1:assign(参数名,变量名)
        $name = 'zyx';
        $age = 28;
        $this->view->assign('name',$name);//此处的参数名和变量名一般情况下保持一致
        $this->view->assign('age',$age);
        return $this->view->fetch();//赋值完成后在模板中展示,fetch中不写参数则默认与方法同名的模板

        //方法2:fetch()中传参赋值  $this->view->fetch(模板名称,[参数数组]);
        return $this->view->fetch('index@index/demo2',['name'=>'lss','age'=>28]);

        //方法3:对象赋值
        $this->view->name = 'zmz';
        $this->view->age = 1;
        return $this->view->fetch();

    }


    //模板内容替换与过滤
    public function demo3(){
        
        $this->view->name = 'zyx';

        //1.全局替换,在config/template.php中进行配置可以实现全局替换,优点是替换规则统一、代码少,缺点是不够灵活,部分不需要强制转换的场合比较麻烦

        //2.控制器中定义替换规则,实现替换范围可控、替换规则多样
        $filter = function($content){
            return str_replace('zyx','xyz',$content);
        };
        return $this->view->filter($filter)->fetch();

        //2.1代码简化
        return $this->view->filter(function($content){
            return str_replace('zyx','xyz',$content);
        })->fetch();

        //替换与过滤思路一致,str_replace(被替换字符串,要替换成的字符串,字符串来源)中第二个参数的定为空则实现过滤,定为任意字符可实现替换
    }


    //模板布局有三种方式:全局配置、模板中标签配置、控制器中动态配置
    /*
    *首先需要在view文件夹下建立布局文件layout.html(布局文件名称需要与后续配置、使用的布局文件一致)
    *其次,在view/public文件夹下建立布局文件中引入的、各页面统一使用的页面文件(如页面头部、尾部等各页面几乎一致的部分),同时规定一个最终展示的模板文件主体部分名称
    */

    //方法1:全局配置,在config/template.php文件中配置布局开启(layout_on => true)、布局文件名称(layout_name),需同前面建立的布局文件名称相同
    public function demo4(){
        return $this->view->fetch();
    }

    //方法2:模板中标签配置,注释全局配置中的布局代码,仅在要使用的模板中插入标签代码实现当前模板中调用布局文件{layout name="layout" /}
    public function demo41(){
        return $this->view->fetch();
    }

    //方法3:控制器中动态配置,同样关闭全局配置项,仅在控制器代码中加入语句实现
    public function demo42(){
        $this->view->engine->layout(true);
        return $this->view->fetch();
    }
    //简化代码实现链式调用时,需要在fetch()中指明调用布局文件的模板名称
    public function demo43(){
        $this->view->engine->layout(true)->fetch('index@index/demo43');//layout(false)可关闭布局
        //此处可以给layout方法传参,从而改变布局文件名称、模板主体内容标识符(默认为content)
        $this->view->engine->layout('layout','{__CONTENT__}')->fetch('index@index/demo43');
    }


    //模板继承
    /*view下建立基模板base.html,其中只允许出现block标签,然后demo5.html模板文件中加入继承语句
    */
    public function demo5(){
        return $this->view->fetch();
    }
    /*
    *1.基模板中的标签顺序会被子模板继承,因此子模板中各block标签的顺序可以随意,不会产生影响;但是,在block标签内部,子模板中内容的顺序会影响最终输出的结果
    *2.基模板中也可以直接写代码,但是这些代码无法在子模板中进行编辑,而是直接执行,用block标签将所有代码包裹起来的作用是使所有基模板中的代码都能够在子模板中进行重新编辑
    *3.子模板中定义同样名称的标签时,如果子模板与父模板不一致,则输出子模板内容,称为重写;如果子模板内容为空,则意味着删除了父模板中的相应内容
    *4.如果子模板中block标签内加入{__block__},则子模板继承父模板中相同标签内的内容,无法重写,只会增加内容
    *5.子模板中的所有内容必须都写在block标签内,否则会被忽略
    *6.如果子模板中定义了父模板中没有的block标签模块,则这部分block标签的内容也会被忽略
    */
}

?>


运行实例 »
点击 "运行实例" 按钮查看在线实例


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