求助:基于Smarty框架移除特定body类页面的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
相关产品推荐
相关产品推荐

