Как я могу увеличить переменную Smarty?
Я обычно не парень Smarty, поэтому я немного застрял.
Я хочу повторить индекс массива, но я хочу увеличивать его каждый раз, когда я его эхо.
Это то, что у меня есть...
<ul>
{foreach from=$gallery key=index item=image}
<li>
<img src="{$image}" alt="" id="panel-{$index++}" />
</li>
{/foreach}
</ul>
Это не работает.
Это лучший способ сделать это, чтобы предварительно обработать массив, прежде чем передать его Smarty?
Есть ли способ сделать это с помощью Smarty?
Ответы
Ответ 1
Вы можете сделать что-то вроде следующего:
<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}
Ответ 2
Если это 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
Ответ 3
Я думаю, что это то, что вам нужно:
http://www.smarty.net/docsv2/en/language.function.math.tpl
Надеюсь, что это поможет.
Ответ 4
не будет $index++
увеличивать его после эха?
try ++$index;
или do $index++
ПЕРЕД тем, как вы его эхо.
Ответ 5
Предполагая, что вы запускаете через $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 или любой другой суммы в таблице.
Использование index приведет к плохо отложенной таблице. Вы получите немедленное изменение строки на первой итерации цикла (индекс 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 вы просто добавите строку таблицы ближе к завершающей строке.
Надеюсь, это поможет кому-то.
Ответ 6
{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}
Ответ 7
Вы можете использовать {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>