[wellwell-devel] [wellwell/zoom] Add support for named iterators, check_count and prefix attributes to [iterate] tag.

Stefan Hornburg wellwell-devel at rt.icdevgroup.org
Thu Jan 13 23:12:53 UTC 2011


commit dd7710e88ecf7255e83341f5fde54574275a0b66
Author: Stefan Hornburg (Racke) <racke at linuxia.de>
Date:   Thu Jan 13 17:20:04 2011 -0500

    Add support for named iterators, check_count and prefix attributes to [iterate] tag.

 lib/WellWell/Iterate.pm |   31 ++++++++++++++++++++++++++++---
 1 files changed, 28 insertions(+), 3 deletions(-)
---
diff --git a/lib/WellWell/Iterate.pm b/lib/WellWell/Iterate.pm
index 2f95f3c..0d04e3a 100644
--- a/lib/WellWell/Iterate.pm
+++ b/lib/WellWell/Iterate.pm
@@ -31,14 +31,22 @@ use Vend::Data;
 
 use WellWell::Engine qw/load_engine/;
 
+Vend::Config::parse_tag('UserTag', 'iterate Order name');
 Vend::Config::parse_tag('UserTag', 'iterate AddAttr');
 Vend::Config::parse_tag('UserTag', 'iterate HasEndTag');
 Vend::Config::parse_tag('UserTag', 'iterate MapRoutine WellWell::Iterate::iterate');
 
 sub iterate {
-	my ($opt, $body) = @_;
-	my ($engine, $iter, $record, @out);
+	my ($name, $opt, $body) = @_;
+	my ($prefix, $engine, $iter, $record, @out);
 
+	if ($name) {
+		# check for iterator registered in scratch space
+		unless ($iter = $::Scratch->{iterators}->{$name}) {
+			die ::errmsg('Missing iterator %s', $name);
+		}
+	}
+	
 	if (exists $opt->{query}) {
 		if (ref($opt->{query}) eq 'HASH') {
 			# use query builder
@@ -55,6 +63,23 @@ sub iterate {
 		return $iter;
 	}
 
+	if ($opt->{check_count}) {
+		if ($iter->count() >= $opt->{check_count}) {
+			return $body;
+		}
+
+		return;
+	}
+	
+	$prefix = $opt->{prefix} || 'item';
+
+	# skipping records at the top
+	if (exists $opt->{jump} && $opt->{jump} > 1) {
+		for (my $i = 1; $i < $opt->{jump}; $i++) {
+			$iter->next();
+		}
+	}
+	
 	while ($record = $iter->next()) {
 		# turn hash into array
 		my @keys = keys(%$record);
@@ -64,7 +89,7 @@ sub iterate {
 			push(@vals, $record->{$_});
 		}
 		
-		push (@out, Vend::Tags->loop({prefix => 'item', body => $body,
+		push (@out, Vend::Tags->loop({prefix => $prefix, body => $body,
 									  object => {mv_results => [\@vals],
 												 mv_field_names => \@keys}}));
 	}



More information about the wellwell-devel mailing list