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>

現状のままでは機能的かどうかはわかりませんが、一般的な考えを示します。Jqueryを使っているとします。

于 2013-11-12T16:19:01.003 に答える