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

如何在Smarty模板的jQuery语句中按条件引入指定tpl文件

问题分析
  • 你的现有写法存在两个核心逻辑错误:
    1. Smarty 是服务端模板引擎,所有 {include} 类标签会在页面返回给客户端之前就完成渲染执行,无法等待客户端JS的判断结果再触发运行
    2. 你将代码包裹在 {literal} 标签内,Smarty 会直接跳过解析该标签内所有 {} 包裹的语法,{include} 本身就不会被处理
正确实现方案

场景1:需引入的是Smarty模板片段(HTML内容)

提前让Smarty把目标模板渲染完成后暂存,JS判断条件满足后再插入到页面对应位置即可:

{* 预渲染目标模板,存为变量 *}
{capture assign="mobileContent"}
    {include file="file.tpl"}
{/capture}

{literal}
<script>
if (window.matchMedia('(max-width: 767px)').matches) {
    // 条件满足时将预渲染的内容插入到页面,示例是插入到body末尾,可替换为你需要的容器
    document.body.insertAdjacentHTML('beforeend', `{/literal}{$mobileContent|escape:'javascript'}{literal}`);
}
</script>
{/literal}

注意必须给模板变量添加 escape:'javascript' 修饰,避免模板内的特殊字符破坏JS语法结构。

场景2:需引入的是JS/CSS静态资源文件

如果需要引入的不是模板片段,而是独立的静态资源,直接用JS动态加载即可,无需经过Smarty处理:

{literal}
<script>
if (window.matchMedia('(max-width: 767px)').matches) {
    // 动态加载JS文件示例
    const script = document.createElement('script');
    script.src = '你的目标JS文件路径';
    document.head.appendChild(script);
    
    // 动态加载CSS文件示例
    // const link = document.createElement('link');
    // link.rel = 'stylesheet';
    // link.href = '你的目标CSS文件路径';
    // document.head.appendChild(link);
}
</script>
{/literal}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:54:02