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}>。

smarty模板原理的更多相关文章

  1. smarty模板原理和增删改查例题

    Smarty模板:(前后端分离)原理:核心是一个类,先修改配置文件,在使用的时候引入配置文件即可,(init.inc.php)$smarty->assign("ceshi", ...

  2. php模板原理PHP模板引擎smarty模板原理浅谈

    mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...

  3. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  4. smarty模板引擎原理解析

    //php 控制器文件 <?php//引入模板引擎文件include("20130304.php");$smarty =newTinySmarty();$qq_numbers ...

  5. smarty模板执行原理

    为了实现程序的业务逻辑和内容表现页面的分离从而提高开发速度,php 引入了模板引擎的概念,php 模板引擎里面最流行的可以说是smarty了,smarty因其功能强大而且速度快而被广大php web开 ...

  6. Smarty模板引擎原理概述

    smarty(模板引擎,模板技术) 使用smarty主要是为了实现逻辑和外在内容的分离: 特点: 1.速度快(因为第二次执行的时候使用第一次执行时生成的编译文件) 2.缓存技术(正是因为缓存技术,使得 ...

  7. PHP框架模板原理

           PHP框架现在是一种很流行的东西了,很多朋友开发应用与网站都会选择一个PHP框架或模板了,下面我们来看看PHP框架是如何实现的吧. 本文主要来聊聊框架理论,但不针对任何一款框架,不过任何 ...

  8. Smarty模板技术学习

    模板引擎技术:使得php代码和html代码分离的技术就称为"模板引擎技术" 自定义smarty模板技术实现 <?php //迷你smarty原理 class MiniSmar ...

  9. 深入浅出之Smarty模板引擎工作机制(二)

    源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...

随机推荐

  1. GCC中文手册

    GCC 1 NAME gcc,g++-GNU工程的C和C++编译器(egcs-1.1.2) 总览(SYNOPSIS) gcc[option|filename ]... g++[option|filen ...

  2. OpenMP对于嵌套循环应该添加多少个parallel for 分类: OpenMP C/C++ Linux 2015-04-27 14:48 53人阅读 评论(0) 收藏

    一个原则是:应该尽量少的使用parallelfor, 因为parallel for也需要时间开销.即: (1)如果外层循环次数远远小于内层循环次数,内层循环较多时,将parallel for加在内层循 ...

  3. JSBinding / Memory Management (GC)

    C# and JavaScript both have Garbage Collection (GC). They should not conflict with each other. Class ...

  4. remote_addr和x_forwarded_for

    做网站时经常会用到remote_addr和x_forwarded_for这两个头信息来获取客户端的IP,然而当有反向代理或者CDN的情况下,这两个值就不够准确了,需要调整一些配置. 什么是remote ...

  5. 【巩固】CSS3的3D动画 ——3D旋转(1)

    最近学了妙味的css3的动画,2D,3D的都有,先写一个最简单的3d翻转效果,鼠标移入div,正反面翻转效果. 注意点有: 要给正反面外面加个父级: transform-style: preserve ...

  6. itextSharp 附pdf文件解析

    一.PdfObject: pdf对象 ,有9种,对象是按照对象内涵来分的,如果按照对象的使用规则来说,对象又分为间接对象和直接对象.间接对象是PDF中最常用的对象,如前面对象集合里面的,所有对象都是间 ...

  7. 在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗

    转自 http://www.cnblogs.com/zdxster/archive/2011/01/27/1945868.html 在EOS6的项目中,如果采用VC++开发的ActiveX,那么第一次 ...

  8. silverlight 鼠标事件处理

    托管代码注册鼠标事件 不需要再.xaml中声明注册事件. .xaml <Ellipse Name=" Fill="Orange" Canvas.Top=" ...

  9. 【摘】使用tail、head命令过滤行

    tail  -n  10  test.log   查询日志尾部最后10行的日志; tail -n +10 test.log    查询10行之后的所有日志; head -n 10  test.log  ...

  10. Blackfin DSP(八):BF533的DMA

    #include <cdefBF533.h> #include <sys\exception.h> #define POLC 0x00004000 #define PORT_C ...