• phpsmarty使用


    由于业务上的需要,最近先暂时把.net放一放,开始接触php,看了2天(主要参考书《php5+mysql5 web应用开发宝典》),感觉和asp有很多相似的地方,最明显的就是php代码和Html代码相互嵌套,貌似很乱啊,不仅不利于页面设计人员和程序开发人员之间的合作与分工,而且还有许许多多可能产生的问题,……

      不过这个世界上高手太多了,有不少的PHP末班引擎,它的作用就是将页面显示和业务逻辑分开,将php代码和Html代码分离,使得php开发人员和页面设计人员专注于自己的工作。今天主要看了下SmartTemplate(这是看的第一个,因为书上有现成的代码,就先看看这个,别的因素未考虑),

    特点:

    小巧。一般情况下只需复制三个php文件到php可以访问的目录下即可;

    语法简单,易于使用

    工作原理

           在Html模板文件中以特定的格式定义占位符,用于接收php代码处理得到的结果数据。在php文件中,通过引擎将php程序问价个html模板文件关联起来,并将php程序中的数据指定给模板文件中的占位符。这样就将php程序结果与html页面关联起来。

    使用(我是在Windows下使用的)

      下载SmartTemplate的压缩包(可以再这里下载http://smarttemplate.yi.org/www.smartphp.net/content/app/download.php),其中class.smarttemplate.php、class.smarttemplatedebugger.php、class.smarttemplateparser.php是引擎的核心文件,直接将他们放在php项目的根目录下,最好新建个文件夹。

      新建Compiled文件夹和Temp文件夹

      打开class.smarttemplate.php文件,修改$temp_dir(用于保存混合文件的目录,即刚建立的Complied文件夹) 和$cache_dir(刚已经建立Temp文件夹)

    在程序中的使用步骤:

      首先在HTML文件中定义占位符,用于接收PHP程序中得到的数据。用“{ **}”定义,**指占位符名称。占位符数目不受限制,且可以出现在Html代码中的任意位置。

      在Php文件中包含class.smartTemplate.php文件

      实例化SmartTemplate类的一个对象,并定义与当前Php文件关联的html文件

      将数据域Html文件中的占位符关联

      输出到模板文件

    1.

    a.html,主要代码如下

     
    例1
    <table>
        <tr>
            <td>姓名</td>
            <td>{name}</td>
        </tr>
        <tr>
            <td>Email</td>
            <td>{Email}</td>
        </tr>
    </table>
     

      

    a.html中定义了{name}{Email}占位符,分别用于接收姓名,Email数据

    a.php

     
    例1
    <?php
    //包含class.smarttemplate.php文件
    require("../comm/class.smarttemplate.php");

    //实例化SmartTemplate的一个对象,并与a.html关联
    $page = new SmartTemplate("a.html");

    //与Html中的占位符关联
    $page->assign("name","姓名张三");
    $page->assign("Email","Email没有");

    //输出
    $page->output();
    ?>
     

    运行a.php,看结果……

    刚说的是最基本的使用方法,使用assign将数据和占位符关联。如果数据时多条的(比方说读取一个学校的学生信息),这样写就很局限性了,不过可以使用BEGIN……END块关联数据来实现 ,此时去刚建立的compiled文件夹下,会发现多了个a_html.php文件……

    先看例子吧:

    a.html

     
    例2
    <table>
        <!-- BEGIN INFO -->
        <tr >
            <td>姓名</td>
            <td>{name}</td>
            <td>Email</td>
            <td>{Email}</td>
            <td>Age</td>
            <td>{Age}</td>
            <td>QQ</td>
            <td>{QQ}</td>
        </tr>
        <!-- END INFO -->
    </table>
     

     a.php

    例2
    <?php
    //包含class.smarttemplate.php文件
    require("../comm/class.smarttemplate.php");
    //实例化SmartTemplate的一个对象,并与a.html关联
    $page = new SmartTemplate("a.html");

    $INFOS = array(
        array("name"=>"张三","Email"=>"张三@qq.com","Age"=>"12","QQ"=>"1111"),
        array("name"=>"里斯","Email"=>"里斯@qq.com","Age"=>"12","QQ"=>"1111"),
        array("name"=>"王五","Email"=>"王五@qq.com","Age"=>"12","QQ"=>"1111"),
        array("name"=>"赵六","Email"=>"赵六@qq.com","Age"=>"12","QQ"=>"1111")
        );
    $page->assign("INFO",$INFOS);

    //输出
    $page->output();
    ?>

    运行下看到什么结果?

    html中只写了一行,在php中用个数组将数据组织起来,然后关联,得到的是多行。

      再看两个扩展属性,ROWCNT和ROWBIT,ROWCNT表示当前BEGIN……END块内对应的行,从0开始,即0,1,2,……ROWBIT表示ROWCNT最低二进制的值,改值将以0,1,0,1,0,1……出现,这两个是引擎自动得到的,可以直接使用 看例子

    a.html

     
    例3
    <style>
    body
    {
        font-size:12px;
    }
    .col0
    {
        background-color:#ffffff;
    }
    .col1
    {
        background-color:#cccccc;
    }
    </style>

    <table >
        <!-- BEGIN INFO -->
        <tr class="col{ROWBIT}">
            <td>第{ROWCNT}行</td>
            <td>姓名</td>
            <td>{name}</td>
            <td>Email</td>
            <td>{Email}</td>
            <td>Age</td>
            <td>{Age}</td>
            <td>QQ</td>
            <td>{QQ}</td>
        </tr>
        <!-- END INFO -->
    </table>
     

     还使用刚才的php文件,运行后看结果

    在SmartTemplate中还有类似 if……else…… 的判断结构,主要用来对html文件进行控制。语法格式如下

    <!-- IF condition-->

      HTML code

    <!-- ELSEIF condition -->

      HTML code

    <!-- ENDIF-->

      其中condition是一个条件表达式(形式:"占位符"="值")或仅仅是一个占位符,占位符接收php传递的值,如果该值与条件表达式等号右边的值相等,则显示该分支下的Html code,否则不显示;如果条件表达式仅仅是一个占位符,则当占位符收到的值非空是,条件表达式成立,否则不成立。

      在表达式中,等号右侧的值只支持字符串,且必须使用双引号,如<!-- IF class="0"-->.

    看下面的例子

    例四
    <style>
    body
    {
        font-size:12px;
    }
    .col0
    {
        background-color:#ffffff;
    }
    .col1
    {
        background-color:#cccccc;
    }
    .col2
    {
        background-color:#ccc000;
    }
    </style>

    <table >
    <!-- IF Test_IF -->
        <!-- BEGIN INFO -->
        <!-- IF col="0" -->
        <tr class = "col0">
        <!-- ELSEIF col="1" -->
        <tr class = "col1">
        <!-- ELSE -->
        <tr class = "col2">
        <!-- ENDIF -->
            <td>第{ROWCNT}行</td>
            <td>姓名</td>
            <td>{name}</td>
            <td>Email</td>
            <td>{Email}</td>
            <td>Age</td>
            <td>{Age}</td>
            <td>QQ</td>
            <td>{QQ}</td>
        </tr>
        <!-- END INFO -->
    <!-- ENDIF -->

        <tr>
        <form name = "test">
            <td colspan ="9" align="left">
                <!-- IF If_Check -->
                <input type = "checkbox" value= "1" checked>
                <!-- ELSE -->
                <input type = "checkbox" value= "1" >
                <!-- ENDIF -->
                是否选择
            </td>
        </form>
        </tr>

    </table>

    b.php代码

    代码
    <?php
    //包含class.smarttemplate.php文件
    require("../comm/class.smarttemplate.php");
    //实例化SmartTemplate的一个对象,并与a.html关联
    $page = new SmartTemplate("b.html");

    $INFOS = array(
        array("col" => "0","name"=>"张三","Email"=>"张三@qq.com","Age"=>"12","QQ"=>"1111"),
        array("col" => "1","name"=>"里斯","Email"=>"里斯@qq.com","Age"=>"12","QQ"=>"1111"),
        array("col" => "3","name"=>"王五","Email"=>"王五@qq.com","Age"=>"12","QQ"=>"1111"),
        array("col" => "4","name"=>"赵六","Email"=>"赵六@qq.com","Age"=>"12","QQ"=>"1111")
        );

    $Test_if = "1";
    //单独的占位符:正负数均可,空格也行,null也行、0为false,""false
    $If_Check = "-1";
    $page->assign("INFO",$INFOS);
    $page->assign("Test_IF",$Test_if);
    $page->assign("If_Check",$If_Check);

    //输出
    $page->output();
    ?>

    运行自行查看结果

    其中书写的时候要注意:

    IF、ELSEIF、ENDIF全部大写,且ELSEIF可以写成ELSE IF(中间有空格),ENDIF不行,表达式中不能有空格,如上例中的 IF col="1" 不能写成 IF col = "1"(等号两侧有空格)

  • 相关阅读:
    转:C/C++基本数据类型所占字节数
    转:为什么C++中空类和空结构体大小为1?
    转:内存字节对齐
    转:100层楼扔两个鸡蛋的问题
    移动互联网
    辗转相除法
    斐波那契数列
    error C2783: 无法为“T”推导 模板 参数
    创新工场和海豚浏览器宣讲会启示
    转:快速排序的一个小问题没想明白,求助各位
  • 原文地址:https://www.cnblogs.com/hpuCode/p/2741027.html
Copyright © 2020-2023  润新知