0

我有一个多维数组,我将它发送到我使用 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>>
4

1 回答 1

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>

Just AS IS 不确定是否有功能,但我给你一个大致的想法。我假设您正在使用 Jquery。

于 2013-11-12T16:19:01.003 回答