Smarty模板多线展示数组结果问题求助
解决Smarty中键值对数组多行展示问题
你当前遇到的核心问题是:针对ID为199的"Accords mets-vin"特征,它的values数组包含11个元素,但现有代码仅能显示第一个值。原因是你依赖外层foreach的$i变量来索引子数组,而外层循环仅执行4次(对应数组里的4个feature项),完全覆盖不了11个values元素。
问题分析
从你提供的$features数组结构来看,ID=199的feature的values是包含11个餐酒配对建议的数组:
199 => Array (4) values => Array (11) 0 => "Charcuterie" 1 => "Desserts" ... 10 => "Fromages"
要实现多行展示,你需要单独遍历这个子数组,而不是依赖外层循环的索引变量。
修正后的代码
调整逻辑:先定位到ID=199的feature,再循环它自身的values数组,为每个值生成一行内容:
{foreach from=$features item=feature} {if $feature.id_feature == 199 && isset($feature.values)} <div class="col-xs-12 col-md-12 col-lg-12"> <div class="row"> {* 遍历当前feature的所有values元素 *} {foreach from=$feature.values item=value} <div class="col-xs-8 col-md-8 col-lg-8"> <p class="accord_title">{$value|escape:'html':'UTF-8'}</p> </div> {/foreach} </div> </div> {/if} {/foreach}
代码说明
- 外层
foreach仍遍历所有$features项,先筛选出ID=199的特征 - 新增内层
foreach,专门遍历该特征的values数组,每个$value对应一个餐酒配对建议 - 移除了原来的
$i变量,无需再用外层循环的索引取值 - 保留了你原有的HTML结构,每个值都会生成一个带
accord_title类的<p>标签,实现多行展示效果
如果需要启用你注释掉的图标部分,可将图标代码移入内层循环(若图标为统一样式,也可放在外层):
{foreach from=$features item=feature} {if $feature.id_feature == 199 && isset($feature.values)} <div class="col-xs-12 col-md-12 col-lg-12"> {foreach from=$feature.values item=value} <div class="row"> <div class="col-xs-4 col-md-4 col-lg-4"> <img src="{$img_dir}icon-{$value|lower|replace:' ':'-'}-black.png"> </div> <div class="col-xs-8 col-md-8 col-lg-8"> <p class="accord_title">{$value|escape:'html':'UTF-8'}</p> </div> </div> {/foreach} </div> {/if} {/foreach}
这样就能实现你想要的多行展示所有餐酒配对建议的效果了。
内容的提问来源于stack exchange,提问作者Chris99391
相关产品推荐
相关产品推荐

