Smarty模板引擎可实现PHP业务逻辑与页面展示分离,需下载安装、配置路径、编写.tpl模板、分配数据并渲染,支持缓存控制与动态内容排除。

如果您正在开发PHP网站并希望将业务逻辑与页面展示分离,Smarty模板引擎可以提供清晰的代码结构。以下是使用Smarty模板引擎的具体步骤:
一、下载并安装Smarty库
Smarty需要独立部署到项目中,不依赖PHP扩展,通过手动引入类文件即可运行。需确保服务器支持PHP 7.2及以上版本,并具备读写模板缓存目录的权限。
1、访问Smarty官方GitHub仓库或官网(smarty.net),下载最新稳定版压缩包。
2、解压后将libs目录整体复制到您的PHP项目根目录下,例如命名为smarty。
立即学习“PHP免费学习笔记(深入)”;
3、在项目入口文件(如index.php)所在目录创建templates(存放.tpl文件)、templates_c(编译缓存)、cache(页面缓存)、configs(配置文件)四个子目录。
4、为templates_c和cache目录设置可写权限:chmod 755 templates_c cache(Linux/macOS)或确保IIS/Apache用户有写入权(Windows)。
二、初始化Smarty实例并配置路径
在PHP脚本中创建Smarty对象后,必须显式指定模板路径、编译路径等核心参数,否则无法定位和生成缓存文件。
1、在PHP文件顶部引入Smarty.class.php:require_once './smarty/libs/Smarty.class.php';
2、实例化Smarty:$smarty = new Smarty();
3、设置模板目录:$smarty->setTemplateDir('./templates/');
4、设置编译目录:$smarty->setCompileDir('./templates_c/');
5、设置缓存目录(可选):$smarty->setCacheDir('./cache/');
6、启用模板调试控制台(开发阶段建议开启):$smarty->debugging = true;
三、编写Smarty模板文件
Smarty模板使用.tpl后缀,语法以{和}包裹指令,完全隔离PHP代码,仅保留变量输出、逻辑判断与循环等声明式语法。
1、在templates/目录下新建index.tpl文件。
2、在文件中输入基础HTML结构,并嵌入Smarty变量:欢迎,{$name}!
一个功能强大、性能卓越的企业建站系统。使用静态网页技术大大减轻了服务器负担、加快网页的显示速度、提高搜索引擎推广效果。本系统的特点自定义模块多样化、速度快、占用服务器资源小、扩展性强,能方便快捷地建立您的企业展示平台。简便高效的管理操作从用户使用的角度考虑,对功能的操作方便性进行了设计改造。使用户管理的工作量减小。网站互动数据可导出Word文档,邮件同步发送功能可将互动信息推送到指定邮箱,加快企业
3、添加条件判断:{if $user_level gt 5}高级用户{else}普通用户{/if}
4、添加循环输出: {$item.title}{foreach $items as $item}
5、保存文件,确保编码为UTF-8无BOM格式,否则中文可能显示为乱码。
四、在PHP中分配数据并显示模板
PHP脚本负责准备数据并交由Smarty渲染,所有变量必须通过assign()方法注入,不能在模板中直接执行PHP函数(除非已注册)。
1、在PHP文件中定义数据数组:$data = ['name' => '张三', 'user_level' => 8, 'items' => [['title' => '新闻一'], ['title' => '新闻二']]];
2、逐个分配变量:$smarty->assign('name', $data['name']); $smarty->assign('user_level', $data['user_level']); $smarty->assign('items', $data['items']);
3、或批量分配:$smarty->assign($data);
4、调用display方法渲染模板:$smarty->display('index.tpl');
5、浏览器访问该PHP文件,即可看到渲染后的HTML页面,此时实际执行的是templates_c目录下的编译后PHP文件。
五、启用缓存并控制生命周期
Smarty支持页面级缓存,可显著降低重复请求的CPU开销,但需注意动态内容(如用户登录态)不应被全局缓存覆盖。
1、启用缓存功能:$smarty->caching = Smarty::CACHING_LIFETIME_CURRENT;
2、设置缓存有效时间(单位:秒):$smarty->cache_lifetime = 3600;
3、调用带缓存的display:$smarty->display('index.tpl');
4、对需排除缓存的区块使用{nocache}...{/nocache}标签包裹,例如实时时间:{nocache}{date_format}{/nocache}
5、清除特定模板缓存:$smarty->clearCache('index.tpl');,生产环境上线新模板后务必执行此操作。










