Как я могу увеличить переменную Smarty?

Я обычно не умный парень, поэтому я немного застрял.

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

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

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

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

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

Есть ли способ сделать это с помощью Smarty?

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

 <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 – это текущий индекс массива.

Это, вероятно, лучший способ сделать это, однако, чтобы просто использовать счетчик вне цикла 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} 

Если это smarty 2 (который из синтаксиса foreach, который вы используете, он похож), вы можете указать для цикла foreach имя, а затем использовать {$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

Я думаю, что это то, что вам нужно:

http://www.smarty.net/docsv2/en/language.function.math.tpl

Надеюсь, поможет.

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

try ++$index; или do $index++ ПЕРЕД тем, как вы его эхо.

Предполагая, что вы запускаете $ 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 до последней итерации или цикла foreach.

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

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

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

 {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} 

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

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

источник: 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>