2009-10-29 5 views
2

Je souhaite associer une valeur de cellule dans une table avec son en-tête. L'en-tête n'est pas connu, car il était généré par une requête SQL.Associer une cellule de table à l'en-tête

Les tailles comme en-tête provenaient du résultat de retour SQL. Alors, mettez-le dans un tableau,

@sizes = qw(S36 S37 S38 S39 S40 S41 S42); 

Maintenant, si James a la taille S38.

Je veux imprimer une table HTML avec des tailles de tête:

+--------+--------+--------+-------+-------+-------+-------+ 
| S36 | S37 | S38 | S39 | S40 | S41 | S42 | 
+--------+--------+--------+-------+-------+-------+-------+ 
|  |  | James |  |  |  |  | 
+--------+--------+--------+-------+-------+-------+-------+ 

Je sais comment faire si la taille fait partie de la ligne ou le résultat, mais comme en-tête de table?

Comment manipuler ceci avec Perl?

ÉDITÉ:

J'essaie de résumer le code j'ai essayé ...

requête SQL:

select size from articles where order_number = "3"; 

Mettez-vous dans un tableau:

while(my $ref = $sth->fetchrow_hashref()) { 
    $size = "$ref->{'size'}"; 
    push @sizes, $size; 
} 

Say, @sizes est:

@sizes = qw(S36 S37 S38 S39 S40 S41 S42); 

Créer tête HTML basé sur la taille:

+--------+--------+--------+-------+-------+-------+-------+ 
| S36 | S37 | S38 | S39 | S40 | S41 | S42 | 
+--------+--------+--------+-------+-------+-------+-------+ 

Maintenant, dire d'une autre requête SQL, je sais que James a S38. Comment mettre dans la cellule de la ligne droite de la table ci-dessus. Il serait:

+--------+--------+--------+-------+-------+-------+-------+ 
| S36 | S37 | S38 | S39 | S40 | S41 | S42 | 
+--------+--------+--------+-------+-------+-------+-------+ 
|  |  | James |  |  |  |  | 
+--------+--------+--------+-------+-------+-------+-------+ 
+0

Votre question est un peu difficile à répondre. Avez-vous du code que vous pourriez nous montrer? Peut-être si vous essayez de faire quelque chose et ensuite poser une question quand vous êtes coincé? –

Répondre

2

Voici une façon de le faire en utilisant CGI.pm méthodes de génération HTML:

#!/usr/bin/perl 

use strict; 
use warnings; 

use CGI qw(:html); 
use List::AllUtils qw(first_index); 

my @sizes = qw(S36 S37 S38 S39 S40 S41 S42); 
my %person = (name => 'James', size => 'S38'); 

my @row = ('') x @sizes; 
$row[ first_index { $_ eq $person{size} } @sizes ] = $person{name}; 

print start_html, 
     table({ border => 1 }, 
      Tr(td({width => sprintf('%.0f%%', 100/@sizes)}, \@sizes)), 
      Tr(td(\@row))), 
     end_html; 

D'autre part, je ne l'aime HTML::Template:

#!/usr/bin/perl 

use strict; use warnings; 

use HTML::Template; 
use List::AllUtils qw(first_index); 

my @sizes = qw(S36 S37 S38 S39 S40 S41 S42); 
my %person = (name => 'James', size => 'S38'); 

my @row = (' ') x @sizes; 
$row[ first_index { $_ eq $person{size} } @sizes ] = $person{name}; 

my $tmpl_txt = <<EO_TMPL; 
<html><head><style type="text/css"> 
#size_chart { margin: 0 auto; } 
#size_chart td { width: <TMPL_VAR CELL_WIDTH>; border: 2px inset #ddd } 
</style></head> 
<body><table id="size_chart"> 
<TMPL_LOOP ROWS><tr> 
<TMPL_LOOP CELLS><td><TMPL_VAR CELL></td></TMPL_LOOP> 
</tr></TMPL_LOOP> 
</table></body></html> 
EO_TMPL 

my $tmpl = HTML::Template->new(scalarref => \$tmpl_txt); 
$tmpl->param(
    CELL_WIDTH => sprintf('%.0f%%', 100/@sizes), 
    ROWS => [ { CELLS => [ map { { CELL => $_ } } @sizes ] }, 
       { CELLS => [ map { { CELL => $_ } } @row ] }, 
]); 

print $tmpl->output; 
+0

C'est comme de la magie. Merci Sinan. – Stephen

+0

En effet, en effet. – innaM

Questions connexes