Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^3: HTML::Template with HTML::Pager

by keszler (Priest)
on Oct 09, 2013 at 19:39 UTC ( #1057615=note: print w/replies, xml ) Need Help??


in reply to Re^2: HTML::Template with HTML::Pager
in thread HTML::Template with HTML::Pager

Is your $data hash or array? The source for HTML::Pager does:
# fill in the template if ($args_type eq 'ARRAY') { # handle array case my @pager_list; if (defined($self->{column_names})) { my %row; my $x = 0; foreach my $col_name (@{$self->{column_names}}) { $row{"PAGER_DATA_COL_$x"} = "<B>$col_name</B>"; $x++; } push(@pager_list, \%row); } foreach my $rowRef (@{$self->{data}}) { my %row; my $x = 0; foreach my $value (@{$rowRef}) { $value = '' unless (defined($value)); $row{"PAGER_DATA_COL_$x"} = $value; $x++; } if ($x) { push(@pager_list, \%row); } } $template->param('PAGER_DATA_LIST', \@pager_list); } else { # handle the hash case $template->param(PAGER_DATA_LIST => $self->{data}); }
which at first glance appears to ignore $self->{column_names} in the hash case.

Replies are listed 'Best First'.
Re^4: HTML::Template with HTML::Pager
by flyby (Acolyte) on Oct 09, 2013 at 20:46 UTC

    It's an array of hash refs. That's how you get the named fields out.

    my $hashref = { 'rows' => "$i $x", 'offset' => "offset $offset", 'i' => "$i", 'x' => $x, 'INTERFACE' => \@r, }; push(@total, $hashref);

    That's looped over a bunch of test data and then fed to get_data_callback as $data. It's just test junk but works as expected.

    <TD BGCOLOR=#ffffff><TMPL_VAR NAME="rows"></TD>

    produces the correct data stored in the hashref listed above.

    The documentation doesn't mention the ability to pass as hash to get_data_callback so I'm not sure how/if that would work.

    I've also been poking over the Pager.pm code between work issues but nothing has jumped out at me yet. It seems like either it's not possible or it's just not in the code because it's a default or obvious how it's suppose to work. Just not obvious to me. :)

    thanks for looking,

    -Matt

    -- And this works --

    Gen some random headers and add them to an array of hashrefs:

    my @headers = ("1","2", "three", "4", "blank", "blank", "blank", "desc +-1", "desc-2", "desc-3", "desc-4", "desc-5"); for (@headers) { my $href = { 'HEADER' => $_ }; push(@h, $href); };

    Make the primary array of hashrefs:

    my $hashref = { 'rows' => "$i $x", 'offset' => "offset", 'name' => "some data $i", 'x' => $x, 'INTERFACE' => \@r, }; push(@total, $hashref);

    Create the HTML::Template setup:

    my $template = HTML::Template->new( filename => 'testing.tmpl', die_on_bad_params => 0, associate => $query, );

    Add the header array of hashrefs to the template. Might be able to do this at the same time as you create the $template.. but for some reason it didn't work the first time I tried it.

    $template->param(HEADER => \@h );

    That works with this Template:

    <TMPL_VAR NAME="PAGER_JAVASCRIPT"> <FORM> <TABLE BORDER=0 BGCOLOR=#000000 WIDTH=100%> <TR><TD><TABLE BORDER=0 WIDTH=100%> <!-- TMPL_LOOP NAME="HEADER" --> <TH BGCOLOR=#ffffff><!-- TMPL_VAR NAME="HEADER" --></TH> <!-- /TMPL_LOOP --> </TR> <TMPL_LOOP NAME="PAGER_DATA_LIST"> <TR> <TD BGCOLOR=#ffffff><TMPL_VAR NAME="rows"></TD> <TD BGCOLOR=#ffffff><TMPL_VAR NAME="offset"></TD> <TD BGCOLOR=#ffffff><TMPL_VAR NAME="name"></TD> <TD BGCOLOR=#ffffff><TMPL_VAR NAME="x"></TD> <!-- TMPL_LOOP NAME=INTERFACE --> <TD BGCOLOR=#ffffff><!-- TMPL_VAR NAME="description" --></TD> <!-- /TMPL_LOOP --> </TR> </TMPL_LOOP> <TR><TD><TD BGCOLOR=#DDDDDD COLSPAN=15 ALIGN=CENTER> <TMPL_VAR NAME="PAGER_PREV"> <TMPL_VAR NAME="PAGER_JUMP"> <TMPL_VAR NAME="PAGER_NEXT"> </TD></TR> </TABLE> </TABLE> <TMPL_VAR NAME="PAGER_HIDDEN"> </FORM>

    Gives me the correct <TH></TH> headers I want. Cool beans.

    -Matt

      Reading the code more closely the segment that you posted seems to be the key. HTML::Pager doesn't bother creating "real" table headers with <TH></TH>. It just makes the first row of data bold, <B>, and calls that that table headers. I guess I could do the same thing with my data but it seems kind of lame to generate tables without "real" headers.

      Maybe there is a way inject another TMPL_LOOP before the PAGER_DATA_LIST loop and use that as the headers.

      Thanks for the help. Gives me some direction to work in.

      -Matt

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1057615]
help
Chatterbox?
[1nickt]: marto would like to hear that. Of course he speaks very deliberately and dramatically, allowing pauses between words, so if anybody could pull it off it would be him, or someone impersonating him ...
[Eily]: Discipulus that's a chess joke BTW right? Because bishops don't walk straight :D
[choroba]: stop making chessy jokes about bishops!
[choroba]: I mean cheesy
[LanX]: lol
[ambrus]: no, the chess bishop itself is a joke on real bi-shops
[ambrus]: or at least on the stereotype of bi-shops
[choroba]: we call chess bishops "archers"
[Eily]: choroba sorry, I had to get that off my chess
[ambrus]: chess certainly hasn't started those stereotypes, like how kings aren't that powerful but has convinced their whole country to work for them, etc. it's just poured them to a nice clean form that would easily get propagated.

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (14)
As of 2017-09-26 12:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    During the recent solar eclipse, I:









    Results (294 votes). Check out past polls.

    Notices?