|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
djibi Smarty n00b
Joined: 17 Jul 2012 Posts: 2
|
Posted: Tue Jul 17, 2012 11:49 am Post subject: Add a counter into foreach |
|
|
Hi,
i'm new with Smarty and i try to do something basic with a foreach loop.
I'll try to add a custom counter in the loop but that don't work ...
Here is my code :
Code: |
{counter start=1 skip=1 print=false assign=count}
{foreach from=$new_products item='product' name='newProducts'}
// Do somthing
//Here i want to increment {$count} if it's lower than 3 or set to 1 if higher than 3
{/foreach}
|
Can u help me ? |
|
Back to top |
|
U.Tews Administrator
Joined: 22 Nov 2006 Posts: 5068 Location: Hamburg / Germany
|
Posted: Tue Jul 17, 2012 6:31 pm Post subject: |
|
|
You can make use of the @iteration property. See http://www.smarty.net/docs/en/language.function.foreach.tpl
Code: | {foreach from=$new_products item='product' name='newProducts'}
// Do somthing
//Here i want to increment {$count} if it's lower than 3 or set to 1 if higher than 3
{if $product@iteration <= 3}{$count = $product@iteration}{else}{$count = 1}{/if}
{/foreach} |
|
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Tue Jul 17, 2012 7:11 pm Post subject: |
|
|
You probably don't need to create this counter. As Uwe says, the index and iteration are both available in the loop. To do something every 3rd iteration you can do:
Code: | {if $smarty.foreach.newProducts.iteration is div by 3}
...
{/if} |
|
|
Back to top |
|
djibi Smarty n00b
Joined: 17 Jul 2012 Posts: 2
|
Posted: Thu Jul 19, 2012 9:09 am Post subject: |
|
|
Ok thanks so, what do you think about the code below ?
This code work fine and he write an html table with 4 products by line but, if the number of products is not div by 4 (EX :5 products), it write 3 empty <td> before closing the current <tr> and stop the loop.
Code: |
{$productByLine = 4}
{$productLineTurn = 1}
{$tr = true}
{$turns = 1}
<table style="border: 1px solid #CCC;">
{foreach from=$products item=product name=products}
<!-- Start a new line -->
{if $tr}
<tr>
{$productLineTurn = 1}
{$tr = false}
{/if}
<td style="padding: 5px; border: 1px solid #CCC;">
{$productLineTurn} - {$product.name}
</td>
<!-- In end of products array -->
{if $smarty.foreach.products.iteration == $products|@count}
{section name=boucle start=0 loop=$productByLine-$productLineTurn step=1}
<td style="padding: 5px; border: 1px solid #CCC; text-align: center; color: #AAA;">Empty</td>
{/section}
{/if}
{if $smarty.foreach.products.iteration is div by 4}
</tr>
{$tr = true}
{/if}
{$productLineTurn = $productLineTurn+1}
{$turns = $turns+1}
{/foreach}
</table>
|
Thx |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Thu Jul 19, 2012 1:55 pm Post subject: |
|
|
it would be easier to do this:
Code: | <tr>
{foreach ...}
{if ... is div by 4}</tr><tr>{/if}
{/foreach}
</tr> |
This starts a new table row every 4 elements. |
|
Back to top |
|
Jenny88 Smarty n00b
Joined: 20 Aug 2012 Posts: 1
|
Posted: Mon Aug 20, 2012 6:06 am Post subject: |
|
|
Thanks for the assists! I'm quite a newbie myself and your tips always aid me tremendously.
________________________
thesudokugame.net |
|
Back to top |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|