zoukankan      html  css  js  c++  java
  • smarty模板原理

    smarty模板原理

     

    模板主要是用来让前端和后端分离的,前台页面只是一个前台页面,后台页面用php代码写逻辑,写完逻辑拿到前台显示。

    一、写法

    一般需要以下:写3个页面:

    1.显示页面aa.html

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    <body>
    <{$a}>
    </body>
    </html>
    复制代码

    2.类文件Smarty.class.php

    复制代码
    <?php
    class Smarty//写出类的名字
    {
        public $left = "<{";//代表左分隔符,在用phpcms套模板的时候,这个页面里面所有嵌入php的代码都是在{}里面的。phpcms默认的是{},但是用{}容易出现问题,因为本身的静态页面里面就有{}。这里分隔符再用{}的话会混淆。所以这里选择用<{}>。
        public $right = "}>";//代表右分隔符,默认的是},把{}拿到前段页面显示,将{}里面的内容解析出来。
        
        public $attr = array();//定义一个数组,先默认是空的。里面存储注册变量。
        
        function assign($name,$value)//向smarty里面注册变量的方法。里面需要2个参数,第一个参数是变量名,第二个参数是变量值。
        {
            $this->attr[$name] = $value;//方法调用类里面的数组方法,把传过来的变量名当做索引,把传过来的变量值当做数组里面的值,存到数组里面,相当于往数组里面添加一个变量。
        }
        
        function display($filename)//调用模板显示的方法,()里面是静态页面的路径。
        {
            //操作步骤
            //1.读取静态页面所有的内容,把内容存到变量str里面。
            $str = file_get_contents($filename);
            //2.替换内容,获取的内容可能是网页的源代码,会比较长。找到标记的里面的内容,然后替换。替换原理是根据正则表达式找到源代码里面<{}>分隔符里面的内容,然后将<{}>里面的内容替换成数组attr里面的内容。替换完内容之后,替换完的页面会变成数组里面存的,数组里面有可能存变量,例如存的是catid,那么这个页面就变成了动态的页面。
            //3.强替换完的页面保存到某一个位置。
            
            //4.将替换完的页面加载到当前页面,用include或者require加载到当前页面。
        }
    }
    复制代码

    3.注入页面

    复制代码
    <?php
    //这是一个纯php页面,里面只有逻辑,没有前台显示代码。
    $a = 10;
    include("./Smarty.class.php");//引入Smarty类
    $smarty = new Smarty();//新建一个smarty对象
    $smarty->assign("a",$a);//调用assign方法,里面写一个变量,变量名为a,变量值为$a。把这个变量注册进去。
    
    $smarty->display("aa.html");//把一个模板aa.html拿进来。
    复制代码

    二、示例

    1.类的页面

    复制代码
    <?php
    
    define("ROOT",str_replace("\","/",dirname(__FILE__)).'/'); //常量ROOT中指定项目根目录。使用define定义一个常量,常量的名字为ROOT,常量的值为后面的内容,意思是获取文件的路径后,将目录里面的""替换成"/"。将windows里面的路径修改成网页里面的文件的路径。
    
    //echo str_replace("\","/",dirname(__FILE__)).'/'; //获取当前文件所在的位置
    
    require ROOT.'libs/Smarty.class.php'; //加载Smarty类文件
    $smarty = new Smarty(); //实例化Smarty对象
    
    
    define("CSS_PATH","/project/css/");//定义常量,将css文件放到根目录中project/css文件夹下。
    define("JS_PATH","/project/js/");//定义常量,将js文件放到根目录中project/js文件夹下。
    
    //$smarty -> auto_literal = false; //就可以让定界符号使用空格
    $smarty->setTemplateDir(ROOT.'templates/'); //设置所有模板文件存放位置
    //$smarty->addTemplateDir(ROOT.'templates2/'); //添加一个模板文件夹
    $smarty->setCompileDir(ROOT.'templates_c/'); //设置编译过的模板存放的目录
    $smarty->addPluginsDir(ROOT.'plugins/'); //设置为模板扩充插件存放目录
    $smarty->setCacheDir(ROOT.'cache/'); //设置缓存文件存放目录
    $smarty->setConfigDir(ROOT.'configs/'); //设置模板配置文件存放目录
    
    $smarty->caching = false; //设置Smarty缓存开关功能
    $smarty->cache_lifetime = 60*60*24; //设置缓存模板有效时间一天
    
    $smarty->left_delimiter = '<{'; //设置模板语言中的左结束符
    $smarty->right_delimiter = '}>'; //设置模板语言中的右结束符
    
    ?>
    复制代码

    2.注入页面

    复制代码
    <?php
    //引入配置文件
    include("../init.inc.php");//init.inc.php里面已经造smarty对象了。
    
    $a = "hello";
    $smarty->assign("ceshi",$a);//注入变量
    $smarty->display("test.html");//调用模板文件来显示
    复制代码

    3.显示页面

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    <body>
    <{$ceshi}>
    </body>
    </html>
    复制代码

    运行的时候要运行注入页面,注入页面把显示页面拿来使用显示内容,并不是直接走显示页面。直接运行显示页面的话只会显示<{$ceshi}>。

  • 相关阅读:
    面试时会经常遇到的经典算法
    PHP面试题,自己几斤几两,看看就知道了
    springboot整合mybatis时java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
    springboot项目启动无法访问到controller原因之一:引导类位置有问题
    Windows上Tomcat启动,服务中没有Tomcat
    Navicat无法启动,提示无法启动程序,因为计算机中丢失MSVCP140.dll
    未配置jdk环境变量,cmd环境能运行java -version命令
    棒谷科技java岗笔试题与初试题
    Dubbo注册中心Zookeeper安装步骤
    POST提交表单,本地Windows测试无乱码,而将项目部署到服务器端产生乱码原因之一
  • 原文地址:https://www.cnblogs.com/benpaodegegen/p/6193985.html
Copyright © 2011-2022 走看看