2010-12-02 8 views
0

mit habe ich eine Daten-DateiErstellen eines gruppierte Ausgabe Template-Toolkit

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

Und ich möchte Ausgabe

London 
    John 
    George 
Paris 
    Jean 

Ich glaube, ich möchte so etwas wie

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

[%END %]  
[%END %] 

Antwort

2

Es ist wahrscheinlich am besten um diese Art von Daten in Ihrem Controller zu tun. Die Aufgabe von Template Toolkits ist es wirklich, Dinge auszulegen und hübsch zu machen, keine "Berechnungen" zu machen.

Was Sie wollen, ist etwas mehr wie:

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

Es ist möglich, zu tun, was Sie in einer Vielzahl von Möglichkeiten wollen. Sie können VMethods verwenden http://template-toolkit.org/docs/manual/VMethods.html zu spalten, ein Array zu erstellen, spaltete wieder, bauen einen Hash:

[% 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, ich muss zugeben, ich würde gedemütigt werden diese erbte ich in einer Vorlage zu sehen. Aber manchmal tun wir Dinge, die andere für einen guten Grund kasteien ... zu der Zeit ... :-)

Ein etwas besserer Ansatz einzusetzen ist

[% RAWPERL %] 

Block. Zumindest dann, Sie geben zu, Sie haben Code innerhalb der Vorlage und die Operationen auf natürliche und effiziente Weise.