• 模版基础[2]


    一、包含文件

    在一个系统中,可以包含通用的头文件和脚文件:header 和 footer。由于每个页面
    的头脚都是相同的,所以需要独立分离出来,再用包含文件引入他们。
    我们可以在 View 目录下 default 主题目录下创建一个 public 目录,这个目录专门存
    放公共调用模版文件。

    我们在 View/default/User/index.html 写入的代码为:

    1 <include file="Public/header" />
    2 
    3     这里是内容
    4 
    5 <include file="Public/footer"  />

    当然也可以调用绝对路径 <include file='./Weibo/Home/View/default/Public/header.tpl' /> 

    然后在 View/default/Public/header.html 内填入的代码为:

    1 <html>
    2 <head>
    3 </head>
    4 <body>
    5 <div class='header' >这里是头部</div>

    在 View/default/Public/header.html 里写入的代码为:

    1 <div class='footer'>这里是底部</div>
    2 </body>
    3 </html>

    最后在浏览器中显示为:

    同时调用多个模版文件: <include file='Public/header,Public/footer' /> ,这时,header.html和footer.html的内容是显示在一起的

    二.模版注释

    1 {//这是注释}
    2 {/*这也是注释*/}
    3 {/*这是
    4 多行注释*/}

    三. 模版继承

    模版继承是一项灵活的模版布局方式,它类似于子类继承父类,然后子类还可以进行适
    当的修改以满足当前页面的需要。

    这时,在Public文件夹下新建base.html,写入以下代码:

     1 <html>
     2 <head>
     3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     4 <title><block name="title">这里是base的标题</block></title>
     5 </head>
     6 <body>
     7 <include file="public/header" />
     8 <block name="main">主要内容</block>
     9 <include file="public/footer" />
    10 </body>
    11 </html>

    这时,这里的 public/header 只写 <div class='header' >这里是头部</div> ,不用加上<html>这些标签了,因为base.html已经写了。两个都写就重复了。

    footer.html也是同样的道理。

    然后在 View/User/index.html 中开始调用继承base.html了

    1 <extend name='public/base'/>
    2 <block name="title">这里改成自己的标题</block>
    3 <block name="main">这里直接写内容</block>

    这里用 extend 来继承,然后用 block 标签来改变需要改变的内容,记住在 base.html 中的 block 标签是必须要加上 name 的,要不然在需要继承的

    文件里就无法做相应的修改了。

    这时,浏览器中显示为:

    四、模版布局

    ThinkPHP 的模版引擎内置了布局模版功能支持,可以方便实现模版布局以及布局嵌套
    功能。有三种布局方式:

    1.全局配置方式

    在 WeiBo/Common/Conf/config.php 中插入以下配置:

    1 'LAYOUT_ON'=>true,
    2 'LAYOUT_NAME'=>'Public/layout',

    然后在 View/Public/layout.html 中写入以下代码:

     1 <html>
     2 <head>
     3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     4 <title>这里是标题</title>
     5 </head>
     6 <body>
     7 <include file="public/header" />
     8 {__CONTENT__}
     9 <include file="public/footer" />
    10 </body>
    11 </html>

    这时直接在 View/User/index.html 下写 这里是user文件 ,

    浏览器显示为:

    也就是 View/User/index.html 中的‘这里是user文件’是 View/Public/layout.html 中的 {__CONTENT__} ,如果不用 {__CONTENT__} ,也可以在 WeiBo/Common/Conf/config.php 中写入 'TMPL_LAYOUT_ITEM' =>'{__REPLACE__}', 这时,以后就可以用 {__REPLACE__} 代替 {__CONTENT__} 了。

    这时在 View/User/index.html  下任意建立一个文件,写上内容,就会直接调用 View/Public/layout.html 内的内容,然后加上在该文件中的写入的内容一起输出

    子模版不需要载入模版基页,可以在开头加上{__NOLAYOUT__},

    也就是在 View/User/ 下建立的文件,如果不想调用 Public/layout.html 里的内容,就可以在 View/User/ 下建立的文件中加上:

    1 {__NOLAYOUT__}

    这时就只显示该文件里写入的内容,而不再继承 Public/layout.html 的内容了。

    2.模版标签方式

    标签方式,并不需要在系统做任何配置,和模版继承类似,直接引入即可。

    也就是不需要在 WeiBo/Common/Conf/config.php 里加上:

    1 'LAYOUT_ON'=>true,
    2 'LAYOUT_NAME'=>'Public/layout',

    直接在子模版下建立的文件中写入:

    1 <layout name="Public/layout" />

    一定要注意,最后的/>里的/一定要记得写,不然就不能引入该模版了

    如果要替换掉 {__CONTENT__} ,则写成:

    1 //替换变量的方法
    2 <layout name="Public/layout" replace="{__REPLACE__}" />

    3.layout 控制布局
    这个方法是在控制器里操作的。

    在 Home/controller/UserController.class.php 中写入:

    1 class UserController extends Controller {
    2         public function index() {
    3             layout('Public/layout');
    4             $this->display();
    5         }
    6         
    7 }

    这里说明一下,function里的 $this->display(); 一定要写啊,没写的话 View/User/index.html 根本就没有任何输出啊。

    如果是 layout( true); 是引入默认地址基页,但是我刷新总是什么也没有,这个就算了,以后按照 layout('Public/layout'); 这样写好了,还安全有保障。

    1 public  function index() {
    2 layout('Public/layout');
    3 //layout(false); //关闭
    4 $this->display()
    5 }

    九.模版替换

    在模版渲染之前,系统还会对读取的模版内容进行一些特殊字符串替换操作,也就实现
    了模版输出的替换和过滤。这里的替换其实也就是在浏览器中输出的意思。

    在 View/User/index.html 中输入:

    __ROOT__: 会替换成当前网站的地址(不含域名)
    __APP__: 会替换成当前应用的 URL 地址 (不含域名)
    __MODULE__:会替换成当前模块的 URL 地址 (不含域名)
    __CONTROLLER__(或者__URL__ 兼容考虑): 会替换成当前控制器的 URL 地址(不含域名)
    __ACTION__:会替换成当前操作的 URL 地址 (不含域名)
    __SELF__: 会替换成当前的页面 URL
    __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/

    在 WeiBo/Common/Conf/config.php 中增加以下代码:

    1 'TMPL_PARSE_STRING' => array(
    2 '__PUBLIC__' => '/Common', // 更改默认的/Public 替换规则
    3 '__UPLOAD__' => '/Uploads', // 增加新的上传路径替换规则
    4 )

    然后在 View/User/index.html 中输入 __PUBLIC__ ,在浏览器中输出为: /Common 

    PS:__PUBLIC__可以改成--PUBLIC--同样的也可以。

  • 相关阅读:
    链式编程思想
    iOS开发:后台运行以及保持程序在后台长时间运行
    iOS懒加载
    mysql命令行的一些小技巧【实用:多屏显示,格式化输出等】
    iOS UITextField实时监听获取输入内容,中文状态去除预输入拼音字符
    'vector' file not found错误解决 && xcode archive 去掉dsym文件和添加dsym文件
    iOS APP 中H5视频默认全屏播放问题解决
    Sublime Text 3 插件的安装、升级和卸载,以及安装package control 出现问题解决过程记录
    ES5和ES6对象导出和导入(转载,待整理)
    react/React Native 在 import 导入时,有的带花括号{},有的不带原理解析
  • 原文地址:https://www.cnblogs.com/jacson/p/4506352.html
Copyright © 2020-2023  润新知