我有一个多维数组,我发送到模板,我使用smarty。
数组看起来像:
array (size=2)
'gender' =>
array (size=2)
0 => string 'male' (length=4)
1 => string 'female' (length=6)
'states' =>
array (size=11)
0 => string 'Ciudad Autonoma de Buenos Aires' (length=31)
1 => string 'Buenos Aires' (length=12)
2 => string 'Catamarca' (length=9)
3 => string 'Chaco' (length=5)
4 => string 'Chubut' (length=6)
5 => string 'Cordoba' (length=7)
6 => string 'Corrientes' (length=10)
7 => string 'Entre Rios' (length=10)
8 => string 'Formosa' (length=7)
9 => string 'Jujuy' (length=5)
10 => string 'La Pampa' (length=8)
我想要实现的是:我只能从每个数组中显示4个或更少的元素,具体取决于它有多少元素。例如,对于子阵列“性别”,我显示男性和女性。但是,对于子流“状态”,我只需显示前4个元素,然后添加带有“显示更多”链接的图例。
到目前为止我编码的是:
{if $ns eq 'states'}
<dt>Provincia</dt>
{assign var="n" value="0"}
{counter start=0 print=false assign=n}
{foreach from=$r key=k item=v}
{counter print=false}
{if counter lt 3}
<dd>{$v}</dd>
{elseif counter eq 3}
<dd>Ver más<dd>
{/if}
{/foreach}
n = {$n}
{/if}
它没有给我我想要的结果。当它们超过4时,我不知道如何“隐藏”元素。我只能迭代4次,但在那种情况下,如果我没有foreach,我将如何操纵子元素?
输出应如下所示:
Gender
Male
Female
States
Ciudad Autonoma de Buenos Aires
Buenos Aires
Catamarca
Chaco
See More>>
答案 0 :(得分:0)
使用Smarty 3.x,您可以使用@iteration
属性或@index
属性来计算'循环'
{if $ns eq 'states'}
<dt>Provincia</dt>
{foreach $r AS $k=>$v}
{if $v@iteration lt 3}
<dd>{$v}</dd>
{else}
<dd>Ver más<dd>
{break}
{/if}
{/foreach}
n = {$n}
{/if}
<style type="text/css">
{literal}
.el-tohide {display:none;}
{/literal}
</style>
{if $ns eq 'states'}
<dt>Provincia</dt>
{foreach $r AS $k=>$v}
<dd class="{if $v@iteration gt 3}el-states el-tohide{/if}">{$v}</dd>
{if $v@last && $v@iteration gt 3}
<dd class="el-click">Ver más<dd>
{/if}
{/foreach}
n = {$n}
{/if}
<script type="text/javascript">
{literal}
$('.el-click').on('click', function (){
if ($('.el-states').hasClass('el-tohide'))
$('.el-states').removeClass('el-tohide');
else
$('.el-states').addClass('el-tohide');
});
{/literal}
</script>
我不确定是不是功能,但我给你一般的想法。我假设你正在使用Jquery。