2010-12-02 17 views
0

J'ai un fichier de donnéesCréation d'une sortie groupée à l'aide boîte à outils de modèles

city : name 
London : John 
London : George 
Paris : Jean 

Et je voudrais sortie

London 
    John 
    George 
Paris 
    Jean 

je sens que je veux quelque chose comme

[% USE namelist = datafile('namelist.txt') %] 
[% FOREACH city = unique namelist.city ??? %] 
[% city %] 
[% FOREACH name =???? %] 
[% name %] 

[%END %]  
[%END %] 

Répondre

2

Il est probablement le meilleur faire ce genre de données dans votre contrôleur. Le travail de Template Toolkit est vraiment de mettre les choses au clair et de les rendre jolies, pas de faire des "calculs".

Ce que vous voulez est quelque chose comme:

[% SET list = formatter.group_them('namelist.txt') %] 
[% FOREACH item IN list %] 
[% item.key %] 
    [% FOREACH name IN item.value %] 
     [% name %] 
    [% END %] 
[% END %] 

Il est possible de faire ce que vous voulez dans une variété de façons. Vous pouvez utiliser VMethods http://template-toolkit.org/docs/manual/VMethods.html pour diviser, créer un tableau, diviser à nouveau, construire un hachage:

[% data = INSERT 'namelist.txt' %] 
[% lines = data.split("\n") %]\ 
[% list = {} %] 
[% FOREACH line IN lines %] 
    [% pair = line.split(': ') %] 
    [% city = pair.0; name = pair.1; list.city.push(name) %] 
[% END %] 

OK, je dois admettre, je serais mortifié de voir cela dans un modèle que j'ai hérité. Mais parfois, nous faisons les choses que mortifient autres pour une bonne raison ... au moment ... :-)

Une approche légèrement mieux est d'insérer

[% RAWPERL %] 

bloc. Au moins, vous admettez, vous avez du code dans le modèle et vous effectuez les opérations de manière naturelle et efficace.