Template: as_list-Methode zum Forçieren vom Listenkontext
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 6 Aug 2013 15:35:29 +0000 (17:35 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 8 Aug 2013 09:38:37 +0000 (11:38 +0200)
SL/Template/Plugin/HTMLFixes.pm

index fad6993..ce21b5c 100644 (file)
@@ -1,6 +1,7 @@
 package SL::Template::Plugin::HTMLFixes;
 
 use Template::Plugin::HTML;
+use Template::Stash;
 
 1;
 
@@ -27,3 +28,19 @@ sub url {
 }
 
 1;
+
+package Template::Stash;
+
+# A method for forcing list context. If a method uses 'wantarray' then
+# calling that method from Template will do strange stuff like chosing
+# scalar context. The most obvious offender are RDBO relationships.
+
+# Example of how NOT to test whether or not a customer has contacts:
+#   [% IF customer.contacts.size %] ...
+# Instead force list context and then test the size:
+#   [% IF customer.contacts.as_list.size %] ...
+$Template::Stash::LIST_OPS->{ as_list } = sub {
+  return ref( $_[0] ) eq 'ARRAY' ? shift : [shift];
+};
+
+1;