虽然smarty现在已经废弃不用,但是它的原理我们需要了解一下,这也是TP框架的一部分原理,它把前后端分离开,这样前端只需要写静态网页,后端只需要处理数据库和php文件就可以了,phpcms的思路也大抵相同。

smarty里面的核心文件是./project/libs/Smarty.class.php

//这个是Smarty.class.php的思路,其实完整的很复杂
<?php
class Smarty
{
$ldemilter = "{"; //左分隔符
$rdemilter ="}"; //右分隔符 $attr = array( ); //用来存储变量的关联数组 //向模板里面注册变量
function assign($key,$value)
{
$this->attr[$key] = $value;
} //显示模板的方法(实现前后端分离)
function display($url)
{
//1.获取静态模板的内容
$str =file_get_contents($url);
//2.根据正则匹配str里面出现的所有{}里面的内容
//{$a} -> <?php echo $attr[$a] ?>
//3.将替换好的页面保存成临时文件
//首先新建一个 文件
touch("./test.php");
//将内容保存在里面
file_put_contents();
//4.将临时文件拿到当前页面显示
include("./test.php");
} }

然后有一个配置文件:init.inc.php

<?php

define("ROOT",str_replace("\\","/",dirname(__FILE__)).'/'); //常量ROOT中指定项目根目录

//echo str_replace("\\","/",dirname(__FILE__)).'/'; //获取当前文件所在的位置

require ROOT.'libs/Smarty.class.php'; //加载Smarty类文件
$smarty = new Smarty(); //实例化Smarty对象 define("CSS_PATH","/project/css/");
define("JS_PATH","/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 = '}>'; //设置模板语言中的右结束符 ?>

所以我们在使用php是先引用init.inc.php文件(注意:我们在访问的是php文件,显示的才是html文件,访问的和显示的文件不同)

现在我们在main文件里建一个php文件:text.php,我们访问text.php来显示text.html.

<?php
//首先先引用init.inc.php,init.inc.php已经造好对象,所以不需再造对象了
include("../init.inc.php"); $arr = array(
    array("n001","汉族"),
    array("n002","回族"),
    array("n003","苗族")
); $sex = false;
//注册变量
$smarty->assign("s",$sex); $smarty->assign("arr",array(1,2,3,4,5)); $smarty->assign("shuzu",$arr); $smarty->assign("name",11); //显示模板
$smarty->display("test.html");

现在再建个text.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> <{if $name eq 11}>
<div style="width:100px; height:100px; background-color:#63C"></div>
<{else}>
<div style="width:100px; height:100px; background-color:#F00"></div>
<{/if}> <div><{$arr[0]}></div> <select>
<{foreach $shuzu as $v}>
<option value="<{$v[0]}>"><{$v@first}><{$v[1]}></option>
<{/foreach}>
</select> <{lianjie}>
<div style="width:200px; height:200px; background-color:#FC0"></div>
<{/lianjie}> <{sex sex=$s}>
<{color name='color'}>
<{date name='date' time=1}>
<{textarea name='uid' toolbar='full' color='red'}>
<{/textarea}> </body>
</html>

效果截图:

知识点总结
1.配置文件加载
<{config_load file='文件名.conf' section='块'}>  //file找哪个配置文件,section找哪个块元素
例如:<{config_load file='test.conf'}>
调用配置文件
<{#元素名#}>
例如:<div style="background-color:<{#color#}>"><div>
2.配置文件的块
例如:[one]
  color = green
   [two]
  color = red
3.<{$smarty.now}> //当前时间的时间戳
<{$smarty.const.常量}> //访问php常量
date_format //格式化日期 <{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}>

smarty 总结和分析的更多相关文章

  1. Smarty模版引擎的原理

    Smarty是一个使用php写出来的模版引擎,用来将原本与html代码混杂在一起PHP代码逻辑分离,实现前后端分离. Smarty模板优点: 1. 速度:采用Smarty编写的程序可以获得最大速度的提 ...

  2. YII 的源码分析(二)

    上一篇简单分析了一下yii的流程,从创建一个应用,到屏幕上输出结果.这一次我来一个稍复杂一点的,重点在输出上,不再是简单的一行"hello world",而是要经过view(视图) ...

  3. smarty模板中如何嵌入javascript脚本

    [官方网站](http://www.php100.com/manual/smarty/) 在smarty文件里直接写javascript代码时候,造成500错误. javascript代码有很多的{} ...

  4. Smarty缓存技术总结

    大家应该都知道合理使用缓存能有效的减轻网站的服务器压力,php Smarty作为一个非常优秀的php模板引擎,它为我们提供了非常简单而多样化的缓存操作,下面就让我们学习一下smarty缓存操作方面的一 ...

  5. 仿Smarty替换模板标签时遇到的问题

    最近正在做一个微型的仿TP框架,当然以鄙人之技术只能略仿表层,于是遇到的问题层出不穷.今天做到View层替换模板部分,本以为一下子搞掂的事,果不其然又是败下阵来. 好了,来重点. 模板文件 test1 ...

  6. 自己学习smarty的一些代码 和记录

    http://www.yiibai.com/smarty/smarty_install.html  手册可以看这里 index.tpl <!DOCTYPE html> <html&g ...

  7. smarty 快速上手

    smarty半小时快速上手入门教程 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-10-27我要评论 这篇文章主要介绍了smarty半小时快速上手入门教程,以实例的形 ...

  8. smarty 学习记录

    smarty模版是比较大众化的一个模版,在php开发过程当中被很多开发者视为最友好的模版之一,学习smarty课程对于很多培训机构来说也是列入了培训课程之一,那么很多方面就需要我们学习了一. 安装首先 ...

  9. ecshop init.php文件分析

    1.  ecshop init.php文件分析 2.  <?php  3.   4.  /**  5.  * ECSHOP 前台公用文件  6.  * ===================== ...

随机推荐

  1. Faster RCNN原理分析 :Region Proposal Networks详解

    博主的论文笔记: https://blog.csdn.net/YZXnuaa/article/details/79221189 很详细! 另外,关于博主的博客很多拓展知识面: 120篇 深度学习23篇 ...

  2. python 2/3 joblib.dump() 和 joblib.load()

    在python2中加载python3训练和保存的模型时出错: ValueErrorTraceback (most recent call last) --> 237 clf = joblib.l ...

  3. MS SQL server中的isnull函数

    一.ISNULL语法格式 ISNULL ( check_expression , replacement_value ) 二.参数简介 check_expression:将被检查是否为 NULL的表达 ...

  4. ubuntu内窗口最大最小化

    我用的dell笔记本,开始的时候,需要修改dell笔记本的BIOS,里面有一个 Funtion Key 一开始定义的行为是多媒体的,需要改成默认行为,具体记不清了, 反正知道这个,肯定知道哪里找. 然 ...

  5. PCIe调试心得_DMA part1

    作者 :East  FPGA那点事儿 1.PCIe的DMA介绍在PCIe中需要使用DMA的项目,一定要先看XAPP1052,里面包含一个DMA的参考设计,对初学者有极大的帮助. XAPP1052中包含 ...

  6. JACKSON JSON 操作帮助类

    一. 引入POM <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-li ...

  7. C# fixed详解

    相信很多人在这样或那样的项目中,或者无意间看到了fixed语句块,看到之后你肯定会疑问: 1.这个fixed关键字是做什么用的? 2.什么情况下需要该关键字? 3.这个关键字该怎么用? 我相信解决了上 ...

  8. java学习之实例变量初始化

    实例变量的初始化方法 第一种:通过构造函数进行初始化. 第二种:通过声明实例字段初始化. 第三种:通过对象代码块初始化. 通过构造函数进行初始化方法 通过构造函数进行对象初始化,必须在类中声明一个带参 ...

  9. android 面试

    2. 横竖屏切换时候 activity 的生命周期1. 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏 ...

  10. 存储管理器实验——SDRAM

    序言:2440有nand和nor两种启动方式,在裸机部分,都是使用的nand启动. 现在,我们想在nand flash启动的时候,通过SRAM访问存储在外设SDRAM中的程序. nand启动,先把前4 ...