diff options
Diffstat (limited to 'httemplate/search/elements/search-csv.html')
-rw-r--r-- | httemplate/search/elements/search-csv.html | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/httemplate/search/elements/search-csv.html b/httemplate/search/elements/search-csv.html new file mode 100644 index 0000000..9eb1b66 --- /dev/null +++ b/httemplate/search/elements/search-csv.html @@ -0,0 +1,54 @@ +% $csv->combine(@$header); #or die $csv->status; +% +<% $opt{no_csv_header} ? '' : $csv->string %>\ +% +% foreach my $row ( @$rows ) { +% +% if ( $opt{'fields'} ) { +% +% my @line = (); +% +% foreach my $field ( @{$opt{'fields'}} ) { +% if ( ref($field) eq 'CODE' ) { +% push @line, map { +% ref($_) eq 'ARRAY' +% ? '(N/A)' #unimplemented +% : $_; +% } +% &{$field}($row); +% } else { +% push @line, $row->$field(); +% } +% } +% +% $csv->combine(@line); #or die $csv->status; +% +% } else { +% $csv->combine(@$row); #or die $csv->status; +% } +% +% +<% $csv->string %>\ +% +% } +<%init> + +my %args = @_; +my $header = $args{'header'}; +my $rows = $args{'rows'}; +my %opt = %{ $args{'opt'} }; + +#http_header('Content-Type' => 'text/comma-separated-values' ); #IE chokes +#http_header('Content-Type' => 'text/plain' ); +http_header('Content-Type' => 'text/csv' ); # So saith RFC 4180 +http_header('Content-Disposition' => + 'attachment;filename="'.($opt{'name'} || PL($opt{'name_singular'}) ).'.csv"'); + +my $quote_char = '"'; +$quote_char = $opt{csv_quote} if exists($opt{csv_quote}); + +my $csv = new Text::CSV_XS { 'always_quote' => $opt{avoid_quote} ? 0 : 1, + 'eol' => "\n", #"\015\012", #"\012" + }; + +</%init> |