Связать ячейку таблицы с заголовком - PullRequest
2 голосов
/ 29 октября 2009

Я хочу связать значение ячейки в таблице с ее заголовком. Заголовок не известен, как это было генерируется запросом SQL.

Размеры заголовка получены из результата возврата SQL. Затем поместите его в массив,

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

Теперь, если у Джеймса размер S38.

Я хочу напечатать их в виде таблицы HTML с размерами заголовка:

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

Я знаю, как это сделать, если размеры являются частью строки или результата, но как заголовок таблицы?

Как манипулировать этим с помощью Perl?

РЕДАКТИРОВАНИЕ:

Я пытаюсь обобщить код, который я пробовал ...

SQL-запрос:

select size from articles where order_number = "3";

Получить в массив:

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

Скажите, @sizes - это:

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

Создание HTML-заголовка на основе размеров:

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

Теперь, скажем, из другого SQL-запроса, я знаю, что у Джеймса S38. Как поместить в правую строку ячейку приведенной выше таблицы. Было бы:

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

1 Ответ

2 голосов
/ 29 октября 2009

Вот способ сделать это, используя CGI.pm Методы генерации 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;

С другой стороны, я люблю 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...