能否在Smarty配置文件中使用变量?如何从外部文件获取变量?
问题解答
可以从其他文件获取变量,但你当前的写法存在两个关键问题,导致无法实现预期效果:
- Smarty配置文件(
.conf)默认不会解析模板变量,你写的{$title}会被当作普通字符串输出,不会替换为实际变量值; - 你用
$smarty->assign()赋值的是模板变量,但模板里用{#pageTitle#}调用的是配置变量,两者不属于同一作用域,完全不匹配。
解决方案
根据你的需求,这里提供三种可行的实现方式:
方案一:配置前缀+模板变量(推荐)
适合需要配置静态前缀,动态拼接变量的场景:
- 修改
config.conf为静态前缀:
[client] pageTitlePrefix=Mon Site -
- 模板文件中直接拼接配置与变量:
{config_load file="../../config/config.conf" section="client"} <!DOCTYPE html> <html lang="fr"> <head> <title>{#pageTitlePrefix#} {$title}</title> </head> <body> </body> </html>
- 后台仅赋值动态变量:
$smarty->assign('title', $pageTitle);
方案二:解析配置中的变量占位符
如果必须在配置文件中保留变量占位符,可通过eval解析(注意:仅当你完全可控配置文件内容时使用,避免安全风险):
- 配置文件保持不变:
[client] pageTitle= {$title}
- 模板中获取配置值并解析:
{config_load file="../../config/config.conf" section="client"} {assign var="configTitle" value="#pageTitle#"} <!DOCTYPE html> <html lang="fr"> <head> <title>{eval var=$configTitle}</title> </head> <body> </body> </html>
- 后台赋值动态变量:
$smarty->assign('title', $pageTitle);
方案三:直接使用模板变量(最简单)
如果不需要配置文件的灵活性,可直接去掉config_load,仅用模板变量:
- 模板文件:
<!DOCTYPE html> <html lang="fr"> <head> <title>{$pageTitle}</title> </head> <body> </body> </html>
- 后台代码保持不变:
$smarty->assign('pageTitle', $pageTitle);
内容的提问来源于stack exchange,提问作者vh-dev-web
相关产品推荐
相关产品推荐

