ФорумПрограммированиеPHP для идиотовРасширения PHP → Smarty. Обход цикла и определение каждой 4-ой итерации

Smarty. Обход цикла и определение каждой 4-ой итерации

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 ноября 2009 г. 5:20

    Подскажите, как мне определять каждую 4-ую итерацию в смарти, чтобы вставлять разделитель?

    В Django это выглядит так:

    <li {% if forloop.counter0|divisibleby:"4" %} style="clear:both" {% endif %}>
    <a href="/book/{{ book.id }}/"><img src="/{{ book.preview }}" />
    <h2>{{ book.title }}</h2></a>
    </li>
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 9 ноября 2009 г. 5:24, спустя 3 минуты 41 секунду

    http://smarty.net/manual/ru/language.function.foreach.php



    Циклы {foreach} также имеют собственные переменные, которые содержат свойства {foreach}. Они обозначаются так: {$smarty.foreach.foreachname.varname} {$smarty.foreach.foreachname.varname}, где foreachname - это название цикла (значение атрибута name).

    iteration

    iteration используется для отображения текущего номера итерации цикла. Итерации всегда начинаются с 1 и увеличиваются на одну при каждом прохождении цикла.
    first

    first устанавливается в true, если текущая итерация первая.
    last

    last устанавливается в true, если текущая итерация последняя.
    show

    Атрибут show может принимать логические значения (истина или ложь). Если ложь, то цикл foreach не будет отображаться. Если присутствует тэг foreachelse, то он будет отображен.
    Спустя 15 сек.
    не за что)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 ноября 2009 г. 5:27, спустя 3 минуты 20 секунд

    phpdude, это я уже читал, но это не ответ на вопрос. Как тут определить каждую 4-ую итерацию?
    {foreach from=$products item=product}
    title: {$product.title}<br />
    generic: {$product.generic}<br />
    strength: {$product.strength}<br />
    strength_comment: {$product.strength_comment}<br />
    price: {$product.price}<br />
    <br />
    {/foreach}
    Спустя 79 сек.
    Как сюда вставить конструкцию

    {% if forloop.counter0|divisibleby:"4" %}ЭТО 4-АЯ ИТЕРАЦИЯ {% endif %}
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 ноября 2009 г. 5:32, спустя 5 минут 28 секунд

    Нашел, что-то примерно такое:

    {if $smarty.section.i.index is div by 4}
    4-ая
    {/if}
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 ноября 2009 г. 5:41, спустя 8 минут 17 секунд

    Еще так можно:
    {if $smarty.foreach.products.index % 4 == 0}
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 ноября 2009 г. 5:46, спустя 5 минут 25 секунд

    Но вообще, лучше использовать iteration, а не index, ибо index как правило начинается с нуля.
    Вот готовый пример сценария:


    {foreach from=$products item=product name=products}

    title: {$product.title}<br />
    generic: {$product.generic}<br />
    strength: {$product.strength}<br />
    strength_comment: {$product.strength_comment}<br />
    price: {$product.price}<br />

    {if $smarty.foreach.products.iteration % 4 == 0}
    — this {$smarty.foreach.products.iteration} iteration —<br>
    {/if}

    {/foreach}
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 9 ноября 2009 г. 6:05, спустя 18 минут 39 секунд

    {if $smarty.foreach.products.iteration % 4 == 0}

    прости, я просто дума что a % b ты сам сообразишь ))))))))))))))))))

    зы: без обид чмоке)
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!