Я обычно не умный парень, поэтому я немного застрял.
Я хочу повторить индекс массива, но я хочу увеличивать его каждый раз, когда я его повторяю.
Это то, что у меня есть …
<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>