2011-01-05 4 views
13

Я обычно не умный парень, поэтому я немного застрял.Как я могу увеличить переменную Smarty?

Я хочу повторить индекс массива, но я хочу увеличивать его каждый раз, когда я его эхо.

Это то, что у меня есть ...

<ul> 
    {foreach from=$gallery key=index item=image} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$index++}" /> 
    </li> 
    {/foreach} 
</ul> 

Это не работает.

Это лучший способ сделать это, чтобы предварительно обработать массив, прежде чем передать его Smarty?

Есть ли способ, которым я могу это сделать с помощью Smarty?

+2

Но так как вы получите 'index' из цикла Еогеасп, вы имеете в виду, что на самом деле это просто на 1? – mario

+0

@mario Да, это то, чего я хочу. – alex

+0

Вы также можете просто использовать '{counter start = 1}' вместо индекса. – mario

ответ

23

Вы можете сделать что-то вроде следующего:

<ul> 
    {foreach from=$gallery key=index item=image name=count} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.count.index}" /> 
    </li> 
    {/foreach} 
</ul> 

Начиная с нуля, index является текущий индекс массива.

Это, вероятно, лучший способ пойти об этом, однако, чтобы просто использовать counter за пределами foreach петли вы можете использовать counter, например, так:

{counter start=0 skip=1 assign="count"} 

Чтобы увеличить его просто называют {counter} на каждой итерации ,

{counter} 
{*Can then use the $count var*} 
    {if $count is div by 4} 
     {*do stuff*} 
    {/if} 
+1

+1 спасибо Расселу! – alex

+0

Что делать, если мне нужно увеличивать и уменьшать счетчик? – Gio2k

+0

Как насчет того, есть ли у вас более одного файла foreach на странице? Счет будет начинаться с '0' снова. – karadayi

0

не будет $index++ прирастить его после эха?

try ++$index; или do $index++ ПЕРЕД вы эхом.

3

Если это умник 2 (который из синтаксиса Еогеасп вы используете это выглядит), вы можете дать цикл по каждому элементу имя, а затем использовать {$smarty.foreach.name.index}

как так

<ul> 
    {foreach from=$gallery key=index item=image name=foo} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.foo.index}" /> 
    </li> 
    {/foreach} 
</ul> 

Индекс начинается в нуле, если вы хотите, чтобы последовательность, начинающаяся с 1, использовала .iteration вместо .index

Я давно не пользовался smarty, но я всегда находил официальную документацию очень хорошо с большим количеством примеров http://www.smarty.net/docsv2/en/language.function.foreach.tpl

0

Предполагая, что вы пробежать $ Foo, который является массив с индексом и итерационные параметры

{foreach from=$foo item=bar name=humbug} 
    {$smarty.foreach.humbug.index} 
    {$smarty.foreach.humbug.iteration} 
{/foreach} 

Первый столбец являются результаты индекса, второй столбец результаты итерации

0 - 1 
1 - 2 
2 - 3 
3 - 4 
4 - 5 

Это означает, что индекс начинается с 0 как его индекс массива, где, поскольку итерация представляет собой счетчик итераций цикла, который начинается с 1.

Экземпляр, в котором неправильное значение вызывает проблемы, заключается в отображении чего-либо в строках из 4 или любой другой суммы в таблице.

Использование индекс приведет к плохо выложенному столу. Вы получите немедленное изменение строки на первой итерации цикла (индекс 0), которая исправит себя на 5-й итерации (индекс 4), но только в пределах области текущего макета, то есть ваша первая строка будет иметь только 1 ячейку в Это. каждая другая строка имела бы 4 ячейки и данные в каждой ячейке после того, как первая строка появлялась в ячейках таблицы 4 позже, чем это должно было бы быть сделано.

{if $smarty.foreach.humbug.index is div by 4} 
    </tr><tr> 
{/if} 

Использование итерации бы раскладывать изменение строки должным образом не дает равные строки 4 до последней итерации цикла или Еогеасп.

{if $smarty.foreach.humbug.iteration is div by 4} 
</tr><tr> 
{/if} 

После цикла foreach вы просто добавили бы строку таблицы ближе к завершающей строке.

Надеюсь, это поможет кому-то.

0
{foreach from=$foo item=bar name=humbug} 
{$smarty.foreach.humbug.index} 
{$smarty.foreach.humbug.iteration} 
{/foreach} 

или

{foreach from=$foo item=bar name=berlin} 
{$smarty.foreach.berlin.index} 
{$smarty.foreach.berlin.iteration} 
{/foreach} 
0

Вы можете использовать {counter}

{counter} используется для распечатки счета. {counter} будет помнить счет на каждой итерации. Вы можете настроить число, интервал и направление счета, а также определить, должно ли оно распечатать значение. Вы можете одновременно запускать несколько счетчиков на , предоставляя уникальное имя для каждого из них. Если вы не укажете имя, то имя «по умолчанию» будет использоваться

Источник: http://www.smarty.net/docsv2/en/language.function.counter.tpl

Использование:

{counter start=0 print=false assign="count"} 

<ul> 
{foreach from=$listing.products item="product"} 
    {counter} 
    {if $count === 1} 
    <p>Count is 1</p> 
    {/if} 
{/foreach} 
</ul> 
Смежные вопросы