J'ai un plugin TT qui fait les ids triviales uniques:Comment puis-je forcer le contexte de liste dans Template Toolkit avec RDBO?
sub get_unique_uid_tt {
my ($classname, $o) = @_;
my %h;
foreach my $item (@{$o}) {
unless (exists $h{ $item->id }) {
$h{ $item->id } = 1;
}
}
return keys %h;
}
où l'appel de modèle est tout simplement:
[% Namespace.get_unique_uid_tt(data.users) %]
et « données » est un objet RDB, les utilisateurs étant l'une de ses relations . J'ai vérifié que le ".users" renvoie une liste en Perl directement, si la relation a un ou plusieurs éléments.
Toutefois, il semble que TT renvoie l'élément pour les listes d'éléments uniques, tout en renvoyant correctement les listes pour les éléments multiples.
Je regardé ce et a constaté que vous pouvez forcer un contexte de liste avec « .list »:
[% Namespace.get_unique_uid_tt(data.users.list) %]
Cela ne fonctionne pas comme prévu pour les listes à un seul élément, comme Data :: Dumper a révélé:
$VAR1 = [
{
'value' => 1,
'key' => '__xrdbopriv_in_db'
},
{
'value' => bless(
... snip ...
),
'key' => 'db'
},
{
'value' => '1',
'key' => 'id'
}
];
au lieu de l'attendre
$VAR1 = [
bless({
'__xrdbopriv_in_db' => 1,
'id' => '1',
'db' => ... snip ...
}, 'DataClass')
];
est-il un autre moyen simple TT pour obtenir un lis t d'objets, même sur des listes d'éléments uniques? (Une approche consiste à réécrire la fonction, mais qui ne serait pas préférable)