今天主要跟大家分享下模板引擎
目前常见的模板引擎有以下这几种,模板引擎Smarty,Blade,Twig,Haml,Liquid,Mustache
其中最为常见的,比较主流的Smarty,Blade,这两个分别对应是tp以及laravel
今天给大家讲解下什么是smarty
smarty是一个用PHP写的模板引擎,它提供了一个前后端分类计数,前端开发前端,后台开发后端的,美工开发美工的,互相不影响,可以极大的提升工作效率。
下来给大家介绍下smarty优点:
如果你使用过tp框架开发的话应该对这块比较熟悉的
1. 开发速度快:用smarty编写的程序速度会很快,因为传统的php写一个遍历,如果没有前后端分离,你需要写大量的代码,并且需要花费很多时间,这一点是相对于其它的模板引擎技术而言的。
2. 代码编译型:因为这个模板引擎是PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接保存到一个指定的文件目录中,而不再进行模板重新编译
3. 模板缓存技术:smarty选用的一种缓存技术,使用模板开发可以提供页面的加载速度,对网站的性能也一种优化,这种模板缓存只要开启了之后,在一段时间内容,他在渲染会去比对页面内用,如果页面一直,直接调动静态文件,我们都知道静态文件访问速度是最快,减少io资源消耗,如果不一样怎么请求最新的数据再次缓存
不适合smarty的地方:
1. 对数据的实时性要求比较高的就不怎么合适,比例像在线聊天,热点新闻等都不适用。因为模板缓存的优势在于对页面的实时性要求不高
2. 项目太小的也不大适合,因为使用模板引擎需要实现分好,这个小团队开发的速度不会体验的很方便
现在教大家如何去使用smarty
1.https://www.smarty.net/download 登录地址,去下载相对应的版本
Smarty 3.x: PHP 5.2+
Smarty 2.x: PHP 4 or 5
这个有版本要求,你只要根据你的开发环境去下载对应的版本即可
demo文件夹为示例文件夹,里面包含默认文件夹结构,是我们要进行编写程序代码的主要文件夹。demo里文件夹的名称都是smarty默认的目录结构名称,可以通过改smarty对应属性值,再把文件夹名改成我们想要的名称。
libs为smarty代码源文件夹,一般不动。
/libs/Smarty.class.php #主文件
/libs/sysplugins/ #内部plugin
/libs /plugins/ #外部plugin,可自由扩充
/demo/cahce/ #放置缓存文件
/demo/configs / #放置可以载入的配置文件
/demo/templates/ #放置模板文件
/demo/templates_c/ #放置对模板编译后的文件
可以把解压得到的 Smarty-3.1.12 文件夹名改成我们想要的项目名,demo也可以改成我们想要的具体存放编码的文件夹的名称
2、调试Smarty-3.1.12
接下来我们去创建自己的文件,在D盘下demo文件夹下创建index.php。
在templates目录中创建模板index.tpl
(几乎可以是任何文本文件的扩展名,这个模板引擎常用的是tpl,php,html,不建议使用后两者,因为可以从浏览器直接访问而不安全。可以对apache的httpd.conf进行设置,禁止直接访问.tpl文件。或者将templats目录放在网站文档树之外,可以大大的提升站点安全性。)
*/
//接下来我们直接用代码演示
require('../libs/Smarty.class.php'); //index.php代码
$smarty = new Smarty; //实例化对象
$smarty->assign('name','zhang');//对变量赋值 直接将zhang赋值给变量 name
$smarty->display('templates/index.tpl'); //调用模板tpl文件里不能执行PHP语句块
/*
index.tpl页面内容
我们可以直接使用 {$name} {}里面就是对应的变量 直接输出模板
测试一下 {$name}
*/
/*
上面的代码操作是不是很简单,传统的我们需要显示变量需要使用
这么长的一串代码
smarty处理过程
smarty是将原本php源文件,把他编译成中间文件也是php脚本文件,如果说你开启缓存,会根据编译文件再次生成缓存文件(也是php)。
之后的每次访问都会访问编译文件,如果启用缓存且有缓存文件而且没有过期,则直接访问缓存文件,跳过编译文件。这样子的就可以提升你的网页加载速度
编译文件一经生成,就不会被自动更新,除非模板文件或者配置文件更改。源php文件修改是不会引发重新编译的。
*/
//Smarty允许有两种特殊的编译设置存在:
// 下面给大家介绍下关于模板缓存的开启
$smarty->setCaching(true); //开启缓存
$smarty->getCaching();//获取当前缓存状态,默认是false关闭的
$smarty->setcache_lifetime(60);//设置缓存时间单位秒
/*
smarty分界符
在模板文件中,区分普通html代码和smarty代码靠的是分界符。默认是 {} ,但可能会与js和css相冲突。可以进行变更。
*/
$smarty->left_delimiter = "{"; //左分界符,2.0属性,3.0沿用
$smarty->right_delimiter = "}";
/*
分界符就相当于PHP的echo,分界符中的值都将输出,除非赋值等操作
smarty tpl文件中分界符中两个**之间的内容为注释内容如
tpl文件:
{*这是模板注释内容*}
*/
//设置缓存目录路径,不设默认"cache"
$smarty->setCacheDir("cache");
//获取缓存目录路径
$smarty->getCacheDir();
//设置配置目录路径,不设默认"configs"
$smarty->setConfigDir("configs");
//添加配置目录路径,所有路径将会以数组形式保存,调用文件时将在所有路径中查找
$smarty->addConfigDir("configs/test");
//获取配置目录路径的数组
$smarty->getConfigDir();
//设置插件目录路径,不设默认"plugins"
$smarty->setPluginsDir("plugins");
//添加插件目录路径,所有路径将会以数组形式保存,调用文件时将在所有路径中查找,plugins文件夹里放的就是可以在前台或后台按不同规则调用的函数的存储文件,文件名及函数名的命名按不同调用规则有不同写法要求
$smarty->addPluginsDir("plugins/test");
//获取插件目录路径的数组
$smarty->getPluginsDir();
//设置模板目录路径,不设默认"templates"
$smarty->setTemplateDir("templates");
//添加模板目录路径,所有路径将会以数组形式保存,调用文件时将在所有路径中查找
$smarty->addTemplateDir("templates/test");
//获取模板目录路径的数组
$smarty->getTemplateDir();
//设置编译目录路径,不设默认"templates_c"
$smarty->setCompileDir("templates_c");
//获取编译目录路径
$smarty->getCompileDir();
//模版变量, 我们传递数组
$arr = array(array("name