You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Smarty按页面独立分配变量方法及templates_c目录作用咨询

问题解答

1. 页面独立分配变量的实现方案

不用在入口文件集中赋值的话,两种方式都可行,更推荐分页面处理脚本+include的方式,直观且好维护:

  • 先根据$_GET['page']判断当前加载的页面,比如$page = $_GET['page'] ?? 'home';
  • 引入对应页面的PHP逻辑文件,比如$page为home时,执行include 'pages/home.php';,这个文件里只负责给Home.tpl分配变量:
    // home.php
    $smarty->assign('welcome_msg', '欢迎访问首页');
    $smarty->assign('article_list', $db->getArticles());
    
  • 同理,create.php里仅处理Create.tpl的变量:
    // create.php
    $smarty->assign('form_title', '创建新内容');
    $smarty->assign('form_fields', ['title', 'content']);
    
  • 最后在入口文件统一渲染对应模板:$smarty->display("$page.tpl");

Smarty本身没有专门内置方案自动绑定页面与变量,但这种分文件处理的方式完全满足需求,且不会出现变量覆盖——每个页面的处理脚本仅在对应页面加载时执行,变量属于当前请求周期,互不干扰。

2. templates_c目录的作用

templates_c是Smarty的编译目录,核心作用是把你编写的.tpl模板文件转换成可执行的PHP代码。
比如你在模板里写{$welcome_msg},Smarty会将其编译成<?php echo $this->_tpl_vars['welcome_msg']; ?>这类PHP代码,然后把编译后的PHP文件存储在templates_c中。

3. 为什么要保存编译后的模板,和cache目录的区别

二者是不同层面的缓存:

  • templates_c存储编译后的模板PHP文件,目的是避免每次请求都重新解析模板中的Smarty标签(比如循环、变量输出、逻辑判断)。只要原.tpl文件未修改,Smarty就会直接复用templates_c里的编译文件,省去标签解析的开销。
  • cache目录存储最终渲染好的HTML静态内容,比如首页内容10分钟内不变,可开启Smarty缓存,把渲染完成的HTML存在cache里,下次请求直接输出该HTML,无需执行PHP逻辑,节省整个页面的生成时间。

不能直接显示编译后的模板,因为编译后的是PHP代码,不是用户可直接查看的HTML,必须通过PHP执行才能生成有效内容。如果不保存编译后的文件,每次请求都要重新解析模板标签,尤其是复杂模板,性能损耗会非常大。

内容的提问来源于stack exchange,提问作者Karim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:50:27