2013-07-20 77 views
0

我正在將常規模板轉換爲響應式模板。我在生成列時遇到了一些麻煩。Smarty Foreach列

我的守則,工作不正常

<div class="row-fluid"> 
    {foreach name=aussen item=module_data from=$module_content} 
    {php} $col++; {/php} 
     <div class="span4"> 
      <h2>Heading</h2> 
      <p>Text</p> 
      <p><a class="btn" href="#">View details »</a></p> 
     </div> 
    {php} if ($col>=4) {$col=0;echo '';}{/php} 
    {/foreach} 
</div> 

的響應主題具有這種結構

<div class="span9"> 
    <div class="row-fluid"> 
     <div class="span4"> 
      <h2>Heading</h2> 
      <p>Text</p> 
      <p><a class="btn" href="#">Button &raquo;</a></p> 
     </div> 
     <div class="span4"> 
      <h2>Heading</h2> 
      <p>Text</p> 
      <p><a class="btn" href="#">Button &raquo;</a></p> 
     </div> 
     <div class="span4"> 
      <h2>Heading</h2> 
      <p>Text</p> 
      <p><a class="btn" href="#">Button &raquo;</a></p> 
     </div> 
    </div> 
    <div class="row-fluid"> 
     <div class="span4"> 
      <h2>Heading</h2> 
      <p>Text</p> 
      <p><a class="btn" href="#">Button &raquo;</a></p> 
     </div> 
     <div class="span4"> 
      <h2>Heading</h2> 
      <p>Text</p> 
      <p><a class="btn" href="#">Button &raquo;</a></p> 
     </div> 
     <div class="span4"> 
      <h2>Heading</h2> 
      <p>Text</p> 
      <p><a class="btn" href="#">Button &raquo;</a></p> 
     </div> 
    </div> 
</div> 

我怎麼可以重寫我的代碼來生成與類「排液」每一個行時間如果每行已達到最大給3,4或5的columens?

+1

您應該使用Smarty分配來增加計數器,而不是分成PHP:'{php} $ col ++; {/ php}'如果($ col> = 4){$ col = 0; echo'';} {/ php}'可以成爲'{assign var = col value = $ col + 1}'和'{php}可以變成'{if $ col> = 4} {assign var = col value = 0} {/ if}'。 – IMSoP

回答

2

你可以找到一個{foreach}循環您在使用iterationindex性質as described in the Smarty 3 manual(或the equivalent page for Smarty 2)的其中迭代。

在這種情況下,您希望做一些不同的「每4次迭代」,因此您可以使用Smarty的is even by 4結構。您的foreach循環名稱爲aussen,因此要測試的變量是$smarty.foreach.aussen.iteration

或者,您也可以使用現有的{$col}變量(雖然看到我的評論上述關於不使用{php}標籤):如果列數是零,打開一個div容器啓動一個新行;如果它是4,關閉容器div以標記行的結束。這種方法還需要您確定是否在循環的最後一行,以防它不能被4整除,因此您總是關閉該行:{if $col==4 or $smarty.foreach.aussen.last}</div>{/if}