`

30分钟速通,PHP模板引擎Smarty

    博客分类:
  • PHP
阅读更多

30分钟速通,PHP模板引擎Smarty

分类: 技术文档 PHP+MySql 标签:

以下内容是是PHP100的PHP教程视频第27,28,29,30讲的浓缩,并添加一些smarty中文手册的补充材料,简练明了,如果看不懂的话。。。还是先看下27-30讲的视频较好。

 

smarty配置:

 

include("smarty/smarty.class.php"); //调用smarty配置文件,默认在smarty根目录下。
$smarty = new smarty(); //新建一个对象
$smarty->caching = false; //关闭缓存,有利于测试。如需开启缓存,改为true
$smarty->cache_lifetime = 60 //设置缓存存活时间,单位秒,必须把caching=true下才作用
$smarty->config_dir = "./configs"; //设置配置文件目录,可用$smarty->config_load()方法来调用配置文件
$smarty->template_dir = "./templates"; //设置模板目录
$smarty->compile_dir = "./templates_c"; //设置编译目录
$smarty->cache_dir = "./caches"; //设置缓存目录
$smarty->left_delimiter = "{"; //缓存左边界符
$smarty->right_delimiter = "}"; //缓存右边界符

 

 

smarty应用:

 

$smarty->assign("模板变量","值/数组");
$smarty->display("模板名称");

例:

index.php的代码: 
$value = "bluesdog say : learn smarty only 30 minutes" 
$smarty->assign("content",$value); //进行模板变量替换 
$smarty->display("index.htm") //该文件就是模板文件,应该在./templates模板目录下 

index.htm的代码: 
<HTML>
{if $content ne ""} 
{$content} 
{/if} 
</HTML> 

  • 以上类似:$smarty->cache_lifetime = n 都是smarty的变量
  • 以上类似:$smarty->display(template name) 都是smarty的方法
  • 以上类似:{if $content ne ""}…{/if} 都是smarty的函数

 

 

smarty循环:

smarty共有2种循环函数,section循环多维数组,foreach循环一维简单数组。

 

section举例(参数name和loop必不可少,name=自定义循环名 loop=用来循环的变量):
{section name=s loop=$stu}
{$stu[s].name}
{sectionelse}
无内容
{/section}

例:新闻列表循环

index.php代码:
include("smarty_inc.php"); //smarty配置文件
$news[]=array("title"=>"新闻标题第一条","date"=>"2009-01-01");
$news[]=array("title"=>"新闻标题第二条","date"=>"2009-01-02");
$news[]=array("title"=>"新闻标题第三条","date"=>"2009-01-03");
$news[]=array("title"=>"新闻标题第四条","date"=>"2009-01-04");
$news[]=array("title"=>"新闻标题第五条","date"=>"2009-01-05");
$row=array("标题","作者","当前页");
$smarty->assign("row",$row);
$smarty->assign("news",$news);
$smarty->display("index.htm");

index.htm代码:
<html>
{$row[0]} | {$row[1]} | {$row[2]}
<hr>
<ul>
{section name=list loop=$news}
<li>
{$news[list].title}-{$news[list].date}
</li>
{/section}
</ul>
</html>

foreach举例(参数from和item必不可少,item=自定义循环名 from=用来循环的变量):
//无键值数组
{foreach from=$name item=id}
id:{$id}<br>
</foreach>

//有键值数组
{foreach key=j item=v from=$name}
{$j}:{$v}<br>
{/foreachelse}
没有内容了
{/foreach}

例:

include(“smarty_inc.php”); //smarty配置文件 
$value=array(1,3,5,7);
$value2=array(‘a’=>’php’,’b’=>’java’,’c’=>’C++);
$smarty->assign(‘name’,$value);
$smarty->assign(‘name2’$value2);
$smarty->display(“index.html”);

index.html代码:
{foreach from=$name item=id}
数组:{$id}<br>
{/foreach}
{foreach from=$name item=id key=k}
数组键值:{$k} 数组内容:{$id}<br>
{/foreach}


 

 

smarty内置函数:

 

(注:这些内置函数都是写在模板文件上的,如index.html,index.tpl。foreach和section也是smarty的内置函数,由于较为重要,所以在上一段单独列出)

 

include多功能使用

{include file="header.html"}
{include file="D:\www\head.htm"} // 可以使用绝对路径
{include file="head.html" title="bluesdog"} // 如果head.html中有{$title},则直接替换成bluesdog

 

IF条件语句的使用

{if $name==’ok’}

{else}

{/if}

 

literal用以忽略页面中的javascript的{}

{literal}
<script language=javascript>
fun1(){
… …
}
</script>
{/literal}

 

strip 删除代码中的首尾空格和回车,让代码成一行

{strip}
一般放在html代码的开始和结束
{/strip}

 

 

smarty缓存:

 

smarty缓存的配置

$smarty->cache_dir = "/caches/";  //缓存目录
$smarty->caching = true;           //开启缓存
$smarty->cache_lifetime = 60;     //缓存时间,单位秒
//你可以给不同的模板设置不同的缓存过期时间,一个lifetime,一个display。

 

smarty缓存的使用和清除

$smarty->display(‘cache.htm’,cache_id); //创建带ID的缓存 
$smarty->clear_all_cache(); //清除所有缓存 
$smarty->clear_cache(‘index.htm’); //清除index.htm的缓存 
$smarty->clear_cache(‘index.htm’,cache_id); //清除指定id的缓存

 

smarty局部缓存函数
(注:insert和blockname都是smarty的内置函数,由于较为重要单独拿出来讲)

  1. insert 函数用于小块不缓存内容
    例1:
    index.php
    function insert_shijian (){
     return date("Y-m-d H:m:s");
    }

    index.htm
    <div>{insert name="shijian"}</div>


    例2:

    include(“smarty_inc.php”); //配置的一个smarty类文件 
    include(“mysql_inc.php”); //一个操作mysql的类文件 
    if($_GET[id]){
    $sql=”select * from bluesdog where id=”.$_GET[id];
    $query=$db->query($sql); //mysql类中的方法query=mysql_query() 
    $row=$db->fetch_array($query); 
    $db->query(‘update bluesdog set hit=hit+1 where id=’.$_GET[id]);
    }
    $smarty->assign(‘row’,$row);
    function insert_hits(){
    global $row;
    return $row[2];
    }
    $smarty->display(‘index.html’);

    index.html
    标题:{$row[name]}<br>
    点击:{$row[hit]}次<br> //缓存开启时,这部分内容不会即时更新 
    点击:{insert name=’hits’} //insert就能即时更新了


  2. smarty_block 函数用于大量不缓存的内容
    {blockname}
    没有缓存的:{$smarty.now}
    {/blockname}

 

 

smarty两个最重要的方法:

 


display显示模板

display (template [,cache_id [,compile_id]]) 
cache_id指定一个缓存号。
compile_id指定一个编译号。

例:
include("Smarty.class.php");
$smarty = new Smarty;
$smarty->caching = true;

// is_cached也是smarty的方法之一,用于只有在缓存不存在时才调用数据库
if(!$smarty->is_cached("index.tpl")){
$address = "245 N 50th";
$smarty->assign("Name","Fred");
$smarty->assign("Address",$address); 
}
// 显示输出
$smarty->display("index.tpl");

 

fetch 取得输出的内容

fetch (template [,cache_id [,compile_id]]) 
返回一个模板输出的内容(HTML代码),而不是像display()那样直接显示出来,常用于静态输出html文件。

例:
include("Smarty.class.php");
$smarty = new Smarty;
$smarty->caching = true;
// 只有在缓存不存在时才调用数据库
if(!$smarty->is_cached("index.tpl")){
 // dummy up some data 
$address = "245 N 50th"; 
$db_data = array(  "City" => "Lincoln",  "State" => "Nebraska",  "Zip" = > "68502"  );
$smarty->assign("Name","Fred"); 
$smarty->assign("Address",$address); 
$smarty->assign($db_data);
}
// 捕获输出
$content = $smarty->fetch("index.tpl");
//下面将内容写入至一个静态文件 
$file = fopen("index.html","w");
//OK, 到这里这个index.html静态页就生成了
fwrite($file,$content);
$fclose($file);

 

smarty变量操作符:

另外smarty一共有20个变量操作符,个人认为只有处理一些英文文章时才有它们的用武之地,所以不再介绍。

最后,可以用{* 这是一个注释 *} 给smarty的模板文件加上必要的注释

Smarty常用功能介绍大致就这些,是不是很简单?看看秒表,可能30分钟还没到。

 

http://www.bluesdog.cn/blog/articles/2010-1/2010181622083.asp

分享到:
评论

相关推荐

    S变换+Sockwell R G , Mansinha L , Lowe R P . Localization of the complex spectrum: the S transformJ

    s变换用的高斯窗函数( 高斯窗是指数窗的一种,它也无负的旁瓣,而且没有旁瓣波动,因而不回引起计算谱中假的极大值或极小值,而且高斯窗频率窗函数的主瓣比指数窗的主瓣窄,分辨率比指数窗有所提高。

    2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip

    2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip

    AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    基于java+springboot+vue+mysql的远程教育网站设计与实现.docx

    基于java+springboot+vue+mysql的远程教育网站设计与实现.docx

    springboot005学生心理咨询评估系统(源码+数据库+论文+PPT+包调试+一对一指导)

    毕业设计资料,计算机毕业设计,源码,毕业论文,毕业答辩,答辩PPT,Java毕业设计,php毕业设计,ASP.NET毕业设计,毕业指导,计算机作业,php作业,java作业,ASP.NET作业,编程作业,管理系统,网站,app,毕业设计学习,Java学习,php学习,ASP.NET学习,java课程,php课程,ASP.NET课程,答辩技巧,SQLSERVER数据库,Mysql数据库,jdbc,SSM框架,SpringBoot框架,Html5,小程序

    蓝牙串口助手,可以连接HC-05等蓝牙模块,实现单片机设备与手机通讯,安卓手机,蓝牙调试助手,具有按键功能!

    蓝牙串口助手,可以连接HC-05等蓝牙模块,实现单片机设备与手机通讯,安卓手机,蓝牙调试助手,具有按键功能!

    TriLib-2-Model-Loading-Package-2.3.7.unitypackage

    TriLib 2 是一个跨平台的运行时 3D 模型导入器

    “人力资源+大数据+薪酬报告+涨薪调薪”

    人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。

Global site tag (gtag.js) - Google Analytics