Smarty模板中如何对存储分类ID的数组变量编写if包含判断
Smarty判断分类数组包含指定ID的实现方案
你之前的写法不生效是因为$iCat是二维数组,每个子元素才包含category_id字段,不能直接对外层数组做包含判断,可选择以下任意一种方案实现:
方案1:直接调用PHP函数实现(最简洁,推荐)
Smarty3及以上版本支持直接调用PHP内置函数,可先提取所有分类ID为一维数组再做包含判断:
{if in_array(10, array_column($iCat, 'category_id'))} Do something {/if}
方案2:遍历标记法(兼容低版本Smarty)
如果Smarty版本不支持直接调用上述PHP函数,可通过遍历加自定义标记的方式实现:
{* 先初始化标记变量为false *} {assign var="hasCat10" value=false} {foreach from=$iCat item=cat} {if $cat.category_id == 10} {assign var="hasCat10" value=true} {break} {* 匹配到后提前终止遍历,优化性能 *} {/if} {/foreach} {* 后续根据标记变量判断逻辑 *} {if $hasCat10} Do something {/if}
方案3:自定义修饰符(适合多场景复用)
如果项目多处需要用到类似判断,可以在PHP端注册自定义修饰符,模板调用更简洁:
- PHP端注册修饰符代码:
// 注册判断分类ID是否存在的Smarty修饰符 $smarty->registerPlugin('modifier', 'has_category', function ($catList, $targetId) { foreach ($catList as $item) { if ($item['category_id'] == $targetId) return true; } return false; });
- 模板中直接调用:
{if $iCat|has_category:10} Do something {/if}
内容的提问来源于stack exchange,提问作者OmletteDuFromage
相关产品推荐
相关产品推荐

