Helpers

Cycle

The Cycle helper is used to alternate a set of values.

Basic Usage

To add elements to cycle, specify them in constructor:

<table>
    <?php foreach ($this->books as $book): ?>
        <tr class="<?= $this->cycle(['odd', 'even'])->next() ?>">
            <td><?= $this->escapeHtml($book['author']) ?></td>
        </tr>
    <?php endforeach ?>
</table>

The output:

<table>
    <tr class="odd">
       <td>First</td>
    </tr>
    <tr class="even">
       <td>Second</td>
    </tr>
</table>

Instead of passing the data at invocation, you can assign it ahead of time:

<?php $this->cycle()->assign(['odd', 'even']); ?>

You can also cycle in reverse, using the prev() method instead of next():

<table>
    <?php foreach ($this->books as $book): ?>
    <tr class="<?= $this->cycle()->prev() ?>">
       <td><?php echo $this->escapeHtml($book['author']) ?></td>
    </tr>
    <?php endforeach ?>
</table>

The output of the two previous examples combined becomes:

<table>
    <tr class="even">
       <td>First</td>
    </tr>
    <tr class="odd">
       <td>Second</td>
    </tr>
</table>

Working with two or more cycles

If you are nesting cycles, you must provide all but one of them with a name; do this by providing a second parameter to the cycle() invocation: $this->cycle(['odd', 'even'], 'cycle2')

<table>
    <?php foreach ($this->books as $book): ?>
        <tr class="<?= $this->cycle(['odd', 'even'])->next() ?>">
            <td><?= $this->cycle([1, 2, 3], 'number')->next() ?></td>
            <td><?= $this->escapeHtml($book['author']) ?></td>
        </tr>
    <?php endforeach ?>
</table>

You can also provide a $name argument to assign():

<?php $this->cycle()->assign([1, 2, 3], 'number'); ?>

Or use the setName() method priort to invoking either of next() or prev().

As a combined example:

<?php
$this->cycle()->assign(['odd', 'even'], 'classes');
$this->cycle()->assign([1, 2, 3], 'numbers');
?>
<table>
    <?php foreach ($this->books as $book): ?>
        <tr class="<?= $this->cycle()->setName('classes')->next() ?>">
            <td><?= $this->cycle()->setName('numbers')->next() ?></td>
            <td><?= $this->escapeHtml($book['author']) ?></td>
        </tr>
    <?php endforeach ?>
</table>