Как я могу увеличить переменную 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

Ответ 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>