- ベストアンサー
HTML::Templateでカレンダー出力したい
- Calendar::SimpleとHTML::Templateを利用しtableタグを使ったカレンダー表示を行いたい
- 1週間ごとに<tr>タグで区切るループの記載の仕方がわからない
- baseサブルーチンでは1週間ごとに<tr>タグで区切られたきれいなカレンダー表示がされるが、myplanサブルーチンでは日にちの数字が1週間ごとに区切られずに横並びとなってしまっている
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
表示がくずれるので、空白2文字を全角空白にしていることに注意。 use strict; use warnings; use utf8; use CGI; use CGI::Carp qw(fatalsToBrowser); use CGI::Pretty; use HTML::Template; my @week_caps = ( { jp => '日', class => 'sunday' }, { jp => '月', class => 'monday' }, { jp => '火', class => 'tuesday' }, { jp => '水', class => 'wednesday' }, { jp => '木', class => 'thursday' }, { jp => '金', class => 'friday' }, { jp => '土', class => 'saturday' } ); my @calendar = ( [ '', '', 1, 2, 3, 4, 5 ], [ 6, 7, 8, 9, 10, 11, 12 ], [ 13, 14, 15, 16, 17, 18, 19 ], [ 20, 21, 22, 23, 24, 25, 26 ], [ 27, 28, 29, 30, 31, '', '' ] ); my @month_weeks = (); for my $week (@calendar) { my @wdays = (); for my $i ( 0 .. 6 ) { push @wdays, { class => $week_caps[$i]->{class}, day => $week->[$i] }; } push @month_weeks, { WDAYS => \@wdays }; } my $template = HTML::Template->new( filehandle => *DATA ); $template->param( WEEK_CAPS => \@week_caps, MONTH_WEEKS => \@month_weeks ); my $q = CGI->new(); print $q->header( -charset => 'UTF-8' ), $q->start_html( -title => "TEST", -lang => 'ja', ), $template->output, $q->end_html; __DATA__ <table> <tr> <TMPL_LOOP NAME=WEEK_CAPS> <th class="<TMPL_VAR NAME=class>"><TMPL_VAR NAME=jp></th> </TMPL_LOOP> </tr> <TMPL_LOOP NAME=MONTH_WEEKS> <tr> <TMPL_LOOP NAME=WDAYS> <td class="<TMPL_VAR NAME=class>"><TMPL_VAR NAME=day></td> </TMPL_LOOP> </tr> </TMPL_LOOP> </table>
お礼
ありがとうございます。おかげで正常に出力できる様になりました。 休み前に閲覧はできていたのですが、キーボード等テスト環境がそろわずお礼が遅れてしまいました。