zoukankan      html  css  js  c++  java
  • PHPLIB Template入门系列 4 模板嵌套

    简介:这是PHPLIB Template入门系列 - 4 模板嵌套的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324604' scrolling='no'> 在PHP程序里,我们常常会把"公用代码"或"公用部分"写进一个文件里,前者象我们的系统配置文件,比如config.php,或者公共函数都写入一个functions.php文件里;后者象一个站点都需要用到的页面头部,尾部.这样做的好处是可以很方便的维护站点,而如果这个公用部分要有所改动,无需再去改每一个页面,大大减少了我们的工作量.

    PHPLIB Template入门系列 - 4 模板嵌套
    【楼 主】
    在PHP程序里,我们常常会把"公用代码"或"公用部分"写进一个文件里,前者象我们的系统配置文件,比如config.php,或者公共函数都写入一个functions.php文件里;后者象一个站点都需要用到的页面头部,尾部.这样做的好处是可以很方便的维护站点,而如果这个公用部分要有所改动,无需再去改每一个页面,大大减少了我们的工作量.
    以前你或许用require,include(require_once,include_once)引进一个公用的页面头部,确实方便而有效,现在我们用Template模板类也可以实现了,并且可以很方便的把一个页面随意插入另一个模板的任意地方.如果你想也把要插进的页面做成含有变量的模板的话,那么你会发现模板类会把这个工作处理的很好.

    在template目录下新建三个文件third.html,header.html,footer.html.内容分为如下
    third.html
    <!-- 这是页面头部 -->

    <BODY>
    下面是一个列表
    <UL>
    <!-- BEGIN list -->
    <li> 的成绩是
    <!-- END list -->
    </UL>
    <!-- 这是页面脚部 -->

    </BODY>
    </HTML>

    header.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> </TITLE>
    </HEAD>

    footer.html
    <P>author © iwind

    你也看到了,我们前几节的例子中都是用
    $tpl->set_file("main", "模板文件名");
    来加载模板文件的。只所以命名为"main",是因为我们想给它一个意义:主模板。这里的third.html就可以称之为“主模板”,而欲嵌入主模板third.html的变量所在位置的模板文件header.html,则可以称为"子模板".同样footer.html也是一个"子模板",我们想把它放到主模板里的位置.一个主模板内可以随意嵌入不限内容,尺寸大小,格式等的任何多个子模板.

    下面我们开始我们的PHP程序.

    先是创建一个类的实例对象
    //包含进模板类 template.inc
    require "inc/template.inc";

    //创建一个实例
    $tpl = new Template("template");

    //读进三个模板文件的内容,分别给变量"main", "my_header", "my_footer"
    $tpl->set_file("main", "third.html");
    $tpl->set_file("my_header", "header.html");
    $tpl->set_file("my_footer", "footer.html");

    //执行my_header,my_footer里的模板变量替换,并把最终结果分别赋给主模板中的header,footer
    $tpl->parse("header", "my_header");
    $tpl->parse("footer", "my_footer");

    //然后完成主模板内变量的替换,并输出主模板分析后的内容
    $tpl->parse("mains", "main");

    //输出
    $tpl->p("mains");

    于是,我们便可以通过查看源文件确信header.html,footer.html两个子模板文件的内容已经被加进主模板里了.

    <!-- 这是页面头部 -->
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> </TITLE>
    </HEAD>
    <BODY>
    下面是一个列表
    <UL>
    <!-- BEGIN list -->
    <li> 的成绩是
    <!-- END list -->
    </UL>
    <!-- 这是页面脚部 -->
    <P>author © iwind
    </BODY>
    </HTML>

    你会发现,所有的变量都没了,包括我们未赋值的,,.这是因为我们在创建对象时,第二个参数未设置,而自动采用了"remove"
    $tpl = new Template("template");

    $tpl = new Template("template", "remove");
    的效果是一样的.

    如果我们想给这些变量也赋值,那么方法和单个模板里变量的分析方法是一样的.
    //读模板内容进变量
    $tpl->set_file("main", "third.html");
    $tpl->set_file("my_header", "header.html");
    $tpl->set_file("my_footer", "footer.html");

    //设置子模板header.html里的变量title的值
    $tpl->set_var("title", "这个是网页标题");

    //以下分析主模板里的块的内容
    //设置块
    $tpl->set_block("main", "list", "lists");
    $array = array("张三" => 82, "李四" => 90, "王二" => 60, "麻子" => 77);
    foreach ($array as $username=>$score)
    {
        $tpl->set_var("username", $username);
        $tpl->set_var("score", $score);
        $tpl->parse("lists", "list", true);
    }

    所有程序为
    <?php
    //包含进模板类 template.inc
    require "inc/template.inc";

    //创建一个实例
    $tpl = new Template("template");

    //将整个文件读进来
    $tpl->set_file("main", "third.html");
    $tpl->set_file("my_header", "header.html");
    $tpl->set_file("my_footer", "footer.html");

    //设置header.html里的变量title的值
    $tpl->set_var("title", "这个是网页标题");

    //设置块
    $tpl->set_block("main", "list", "lists");
    $array = array("张三" => 82, "李四" => 90, "王二" => 60, "麻子" => 77);
    foreach ($array as $username=>$score)
    {
    $tpl->set_var("username", $username);
    $tpl->set_var("score", $score);
    $tpl->parse("lists", "list", true);
    }

    //执行my_header,my_footer里的模板变量替换,并把最终结果分别赋给主模板中的header,footer
    $tpl->parse("header", "my_header");
    $tpl->parse("footer", "my_footer");

    //完成主模板内变量的替换
    $tpl->parse("mains", "main");

    //输出
    $tpl->p("mains");

    ?>

    输出的结果为
    <!-- 这是页面头部 -->
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 这个是网页标题 </TITLE>
    </HEAD>
    <BODY>
    下面是一个列表
    <UL>

    <li>张三 的成绩是 82
    <li>李四 的成绩是 90
    <li>王二 的成绩是 60
    <li>麻子 的成绩是 77
    </UL>
    <!-- 这是页面脚部 -->
    <P>author © iwind
    </BODY>
    </HTML>

    一切都是我们所期望的.

    在这个程序里,我们用
    $tpl->set_block("main", "list", "lists");
    加载一个块.其实它的第一个参数为该块所在父变量,如果这个块在header.html里,那么恐怕要这样写了
    $tpl->set_block("my_header", "list", "lists");
    但分析方法还是一样的.

    从以往和这节中的例子,我们可以看出来,定义一个模板变量值的方法是用
    $tpl->set_var("var_name", "var_value");
    但把一个变量的值给另一个变量就需要用parse.
    $tpl->parse("target_name", "from_name", true);
    或者
    $tpl->parse("target_name", "from_name", false);
    使用parse就先执行from_name大变量的模板变量的替换,然后再把所得结果赋给target_name.

    一个变量无论在模板的何处(块里面,子模板里),定义的方法都是一样的.

    子模板里还可以嵌入新的子模板,称之为"多重嵌套",分析的方法都是一样的,只是一般用不到.块也可以多重嵌套,而且非常有用,使得模板可以设计的可以很清晰,这就是我们下一节的内容了.

    “PHPLIB Template入门系列 - 4 模板嵌套”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/324604.html pageNo:14
  • 相关阅读:
    编程之美1的个数统计
    组合以及可以重复的排列
    Swing之图书管理系统
    经常熬夜的人一定要看
    利用SharePoint Designer开发可循环工作流
    SharePoint Software DownLoad Address 微软软件 下载地址
    日期验证 正则表达式
    时间验证 正则表达式
    Reporting Services SharePoint AddIn Setup Problems
    char、varchar、text和nchar、nvarchar、ntext的区别
  • 原文地址:https://www.cnblogs.com/ooooo/p/2253764.html
Copyright © 2011-2022 走看看