zoukankan      html  css  js  c++  java
  • Smarty的应用

    smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹

    (1)libs核心文件夹
    (2)int.inc.php这是入口文件
    (3)plugins:自己写的插件文件夹
    (4)templates_c:存放编译好的文件
    (5)int.inc.php这是入口文件
    (6)定义好常量:不能修改

    二、怎么用模板?

    模板页面
    1.引入模板的入口文件
    include("入口文件路径位置");

    2.直接用对象
    提供一个方法:向模板中注册变量的方法(assign(名字,值)
    $smarty->assign("ceshi","你好");
    提供一个方法:显示模板的(display(模板的名称或是路径))
    $smarty->display("ceshi.html");


    正常页面
    {assign(名字)}

    注意:
    1.访问的是php的页面,显示的是html页面
    2.html用到了外部的样式表,位置是相对于访问的php页面来找外部样式

    (1)php页面

    <?php
    $filename = "../cache/huancun.html";  //这个是放缓存的页面(缓存的不是代码,而是页面的源信息)
     
    include("../init.inc.php");  //引入入口文件
    include("../DBDA.php");   //引入数据库,要用到数据库的内容
      
    $db = new DBDA();  //造新对象
    $sql = "select * from chinastates";  //这是查找Chinastates表中的信息
    $attr = $db->Query($sql);  //执行这个语句
     
    $smarty->assign("shuzu",$attr);  //注册变量信息
    $smarty->display("huancun.html");  //显示模板
    

      

    (2)html页面

    可以用表来显示数据

    <h1>数据列表</h1>
    <table width="50%" border="1" cellpadding="0" cellspacing="0">
            <tr>
                <td>代号</td>
                <td>名称</td>
                <td>操作</td>
            </tr>
                 
            <{foreach $shuzu as $v}>   <!--遍历显示这个表中的相应信息-->
                <tr>
                    <td><{$v[0]}></td>
                    <td><{$v[1]}></td>
                    <td>操作</td>
                </tr>
            <{/foreach}>
                 
    </table>
    

      

    看下效果

    二、就是编写“缓存”功能

    进行写入缓存的时候不是写入的上面的php页面,而是这个页面的源代码

    (1)这个cache文件中要判断这个huancun.html文件存不存在,存在怎么样?不存在怎么样?

    结果就是:如果缓存文件存在:直接调用缓存;如果缓存文件不存在:重新缓存。

    A.如果这个文件存在(判断文件存不存在用的是:file_exists()方法)语句:

    if(file_exists($filename))
    {
        //直接调用缓存   
        include($filename);
    }
    

      

    B.否则(文件不存在)

     重要的是要在上面读取数据库的内容加上这几项:

    1.开启内存缓存;

    2.关闭内存缓存;

    它们是成对的!!!

    else
    {
        //重新缓存 
        ob_start();   //开启内存缓存
         
        include("../init.inc.php");
        include("../DBDA.php");
         
        $db = new DBDA();
        $sql = "select * from chinastates";
        $attr = $db->Query($sql);
         
        $smarty->assign("shuzu",$attr);
        $smarty->display("huancun.html");
         
        $str = ob_get_contents();  //获取内存中的缓存内容
        file_put_contents($filename,$str);  //将字符串中的内容放入$filename的文件中
         
        ob_flush(); //关闭内存缓存
         
        echo "#######################################";  //这个是为了区别哪个是刚出来的缓存文件
     
    }
    

      

    看下效果如下图,因为cache文件夹中没有hunacun.html才会走上面的“否则”语句,输出一长串的######

    再刷新一下就没有了,因为cache文件夹中已经有了huancun.html文件

    三、缓存的有效时间

    缓存要是一直都在的话,那么后台怎么改,前面也不会进行修改,那么就要尽心缓存的有效时间

    代码如下:

    $time = 10;  //缓存有效期10秒
    if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) )  //这是对缓存文件的判断
    

      

    当缓存文件有了并且10秒之后就会重新又没有缓存文件时候的输出####  

    四、进行分页的缓存

    首先是分页的php页面的书写,在上面的更新的php页面中进行再一次修改,如下:

     
    <?php
    $p = 1;
    if(!empty($_GET["page"]))
    {
        $p = $_GET["page"];
    }
     
    $filename = "../cache/huancun{$p}.html";   //缓存文件存放的位置
     
    $time = 10;  //缓存有效期10秒
    if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) )
    {
        //直接调用缓存   
        include($filename);
    }
    else
    {
        //重新缓存 
        ob_start();   //开启内存缓存
         
        include("../init.inc.php");
        include("../DBDA.php");
         
        $db = new DBDA();
        $sqll = "select count(*) from chinastates";
        $zts = $db->StrQuery($sqll);  //总条数的执行语句
         
        include("../page.class.php");
        $page = new Page($zts,10);  //分页显示的条数
         
        $sql = "select * from chinastates ".$page->limit;  //分页的$page->limit
        $attr = $db->Query($sql);
         
        $smarty->assign("fpage",$page->fpage());  //分页信息的显示
        $smarty->assign("shuzu",$attr);
        $smarty->display("huancun.html");
         
        $str = ob_get_contents();  //获取内存中的缓存内容
        file_put_contents($filename,$str);  //将$str的内容写入$filename的文件中
         
        ob_flush(); //关闭内存缓存
         
        echo "#######################################";
     
    }
    

      

    结果就是入下,每一个页面都会从缓存开始有,10秒后失效

    这是第二个页面,刚开始没有缓存文件,所以会有####

    随便点一页,回来后就是有了缓存文件,所以没有了###

  • 相关阅读:
    BZOJ2005 能量汇集 【gcd求和】
    莫比乌斯反演
    匈牙利算法 求二分图最大匹配
    HDU3507 print article【斜率优化dp】
    tyvj1305 最大子序和 【单调队列优化dp】
    NOIP2017 列队 题解报告【56行线段树】
    NOIP2017 宝藏 题解报告【状压dp】
    NOIP2017 逛公园 题解报告 【最短路 + 拓扑序 + dp】
    好的软件测试人员简历是什么样子的?
    淘宝网-接口测试白皮书V0.1
  • 原文地址:https://www.cnblogs.com/li1056822533/p/6771477.html
Copyright © 2011-2022 走看看