Template::Toolkit
テンプレートエンジンとして使用するCatalystアプリを開発しています。1ページには、等しい入力要素のリストが必要です。それらは配列から取得できますが、要素の並べ替え順序と説明ラベルの両方が必要です。
並べ替え順序を設定するには、配列を使用します。キーごとに追加の値を格納するには、ハッシュが最適です。TTで両方を組み合わせる方法は?私は両方を使うことができましたが、それは醜く見え、フィールドを変更するときに間違いを引き起こす可能性があります。
ただし、フォーム要素の説明と順序の両方がフロントエンドのものであるため、TTでこれを行うことをお勧めします。
これは私が純粋なPerlでそれを行う方法です:
#!/usr/bin/perl -w
use 5.10.0;
# definition of description and order in 1 step
my @fields = (
property_foo => "Some property",
property_bar => "Important field",
property_baz => "Something else",
);
# extract information
my %descriptions = @fields;
my @order = @fields[grep {($_ + 1) % 2} 0..(scalar @fields - 1)];
say "=== natural perl sort order ===";
foreach (keys %descriptions) {say $_};
say "=== wanted output ===";
foreach (@order) {
say $descriptions{$_} . ": [label for $_]";
}
出力:
=== natural perl sort order ===
property_baz
property_foo
property_bar
=== wanted output ===
Some property: [label for property_foo]
Important field: [label for property_bar]
Something else: [label for property_baz]
これは私が私のテンプレートに書いたものです:
[%
order = (
property_foo,
property_bar,
property_baz,
);
descriptions = {
property_foo => "Some property",
property_bar => "Important field",
property_baz => "Something else",
}
FOREACH property IN order %]
[% descriptions.$property %]: <input name="[% property %]" />
[% END %]
ただし、同じ情報(フィールドのリスト)を2回持つのは本当に醜いです。リストを2回編集することは避けたいのですが、フィールドのリストが長くなると、非常に煩わしくなります(約20項目、データベースの処理を行うのに十分な長さではありません)。