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

求助:基于Smarty框架移除特定body类页面的footer等元素

解决Smarty框架下特定页面移除Footer元素的问题

看起来你在Smarty模板里控制Footer等元素显示时遇到了判断逻辑的坑,我来帮你排查问题并给出可行的解决方案:

先分析你之前代码失效的可能原因

你之前用的{if !($body_class == 'shop_news_list' || $body_class == 'shop_news')}逻辑,大概率是因为**$body_class变量并非单一类名字符串**——很多情况下,页面的body class会包含多个值(比如shop_news_list page-default),这时候直接用全等判断==就会匹配失败,要么Footer在目标页面没被移除,要么因为变量值不符合预期导致所有页面都隐藏了Footer。

可行的解决方案

方案1:用字符串匹配判断类名存在性

如果$body_class是包含多个类名的字符串,用Smarty的strpos函数来检查目标类名是否存在:

{if strpos($body_class, 'shop_news_list') === false && strpos($body_class, 'shop_news') === false}
    <footer>
        <div class="innerfooter container row"> ... </div>
    </footer>
{/if}

⚠️ 这里一定要用=== false而不是== false,因为如果目标类名在字符串开头,strpos会返回0,用==会把0当成false,导致判断错误。

方案2:数组匹配(如果$body_class是数组)

有些后端会把body的class列表转成数组传给Smarty,这种情况下用in_array判断更准确:

{if !in_array('shop_news_list', $body_class) && !in_array('shop_news', $body_class)}
    <footer>
        <div class="innerfooter container row"> ... </div>
    </footer>
{/if}

关键排查步骤

先确认$body_class的实际值:在模板里临时添加{$body_class},刷新页面看看输出的是字符串还是数组,以及具体包含哪些内容。这一步能帮你快速确定用哪种匹配方式,也能排查是不是变量名写错了(比如后端传的是$bodyClass而不是$body_class)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:57:37