The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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/.