NAME

Template::Liquid::Tag::Cycle - Document-level Persistant Lists

Description

Often you have to alternate between different colors or similar tasks. Template::Liquid has built-in support for such operations, using the cycle tag.

Synopsis

{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}

...will result in...

one
two
three
one

If no name is supplied for the cycle group, then it’s assumed that multiple calls with the same parameters are one group.

If you want to have total control over cycle groups, you can optionally specify the name of the group. This can even be a variable.

{% cycle 'group 1': 'one', 'two', 'three' %}
{% cycle 'group 1': 'one', 'two', 'three' %}
{% cycle 'group 2': 'one', 'two', 'three' %}
{% cycle 'group 2': 'one', 'two', 'three' %}

...will result in...

one
two
one
two

Notes

The cycle tag is the only one which retains state between calls to render For a particular document. So...

use Template::Liquid;
my $solution = Template::Liquid->parse(<<'TEMPLATE');
{% cycle 'group 1': 'one', 'two', 'three' %}
{% cycle 'group 2': 'one', 'two', 'three' %}
{% cycle 'group 1': 'one', 'two', 'three' %}
TEMPLATE
print $solution->render() for 1..3;

...would print...

one
one
two
three
two
one
two
three
three

...rather than...

one
one
two
one
one
two
one
one
two

...which is what would happen if the state was reset after every render.

Remember than state is held for each document so...

use Template::Liquid;
my $solution_a = Template::Liquid->parse(<<'TEMPLATE');
{% cycle 'group 1': 'one', 'two', 'three' %}
{% cycle 'group 2': 'one', 'two', 'three' %}
{% cycle 'group 1': 'one', 'two', 'three' %}
TEMPLATE
my $solution_b = Template::Liquid->parse(<<'TEMPLATE');
{% cycle 'group 1': 'one', 'two', 'three' %}
{% cycle 'group 2': 'one', 'two', 'three' %}
{% cycle 'group 1': 'one', 'two', 'three' %}
TEMPLATE
my $solution_c = Template::Liquid->parse(<<'TEMPLATE');
{% cycle 'group 1': 'one', 'two', 'three' %}
{% cycle 'group 2': 'one', 'two', 'three' %}
{% cycle 'group 1': 'one', 'two', 'three' %}
TEMPLATE

print $solution_a->render();
print $solution_b->render();
print $solution_c->render();

...would print...

one
one
two
one
one
two
one
one
two

See Also

Liquid for Designers: http://wiki.github.com/tobi/liquid/liquid-for-designers

Author

Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/

The original Liquid template system was developed by jadedPixel (http://jadedpixel.com/) and Tobias Lütke (http://blog.leetsoft.com/).

License and Legal

Copyright (C) 2009-2022 by Sanko Robinson <sanko@cpan.org>

This program is free software; you can redistribute it and/or modify it under the terms of The Artistic License 2.0. See the LICENSE file included with this distribution or http://www.perlfoundation.org/artistic_license_2_0. For clarification, see http://www.perlfoundation.org/artistic_2_0_notes.

When separated from the distribution, all original POD documentation is covered by the Creative Commons Attribution-Share Alike 3.0 License. See http://creativecommons.org/licenses/by-sa/3.0/us/legalcode. For clarification, see http://creativecommons.org/licenses/by-sa/3.0/us/.