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

NAME

Dotiac::DTL::Tag::regroup - The {% regroup LIST by PROPERTY as NEWVARIABLE %} tag

SYNOPSIS

Template file:

        {% regroup loop by gender as grouped %}
        {% for group in grouped %}
                <h1>{{ group.grouper }}</h1>
                {% for entry in group.list %}
                        <p>{{ entry }}</p>
                {% endfor %}
        {% endfor %}

DESCRIPTION

Regroups a LIST of objects, hashes or list by a common PROPERTY and saves it into a NEW VARIABLE.

The resulting NEW VARIABLE is a list containing hashes with a "grouper" string, containing the text which was grouped by and a "list" which contains all the objects with the same "grouper" string

This is best explained with an example. If you have this datastructure, each a blog post with a category:

        Posts=>[
                {title=>"I love food",text=>"I really do",category=>"My life"},
                {title=>"I love TV",text=>"Even more than food",category=>"My life"},
                {title=>"Simpsons",text=>"Awesome TV show",category=>"TV shows"},
                {title=>"ANTM",text=>"I love this one",category=>"TV shows"},
                {title=>"xkcd",text=>"The best webcomic",category=>"Webcomics"}
        ]

Now you want to group it by that "category" in the template:

        {% regroup Posts by category as posts_grouped %}
        {% for cat in posts_grouped %}
                <h1>Category: {{ cat.grouper }}</h1>
                {% for entry in cat.list %}
                        <h2>{{ entry.title }}</h2>
                        {{ entry.text|linebreaks }}
                {% endfor %}
        {% endfor %}

This will result in this rendered template:

        <h1>Category: My life</h1>
                <h2>I love food</h2>
                <p>I really do</p>
                <h2>I love TV</h2>
                <p>Even more than food</p>
        <h1>Category: TV shows</h1>
                <h2>Simpsons</h2>
                <p>Awesome TV show</p>
                <h2>ANTM</h2>
                <p>I love this one</p>
        <h1>Category: Webcomics</h1>
                <h2>xkcd</h2>
                <p>The best webcomic</p>

Django has another fine example for this: http://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup

BUGS AND DIFFERENCES TO DJANGO

Django's regroup tag needs the LIST to be sorted, this implementation doesn't need it.

I don't know about Django, but here PROPERY can also contain filters.

        {% regroup loop by content|length as grouped %}

SEE ALSO

http://www.djangoproject.com, Dotiac::DTL

LEGAL

Dotiac::DTL was built according to http://docs.djangoproject.com/en/dev/ref/templates/builtins/.

AUTHOR

Marc-Sebastian Lucksch

perl@marc-s.de