• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HTML::Templateでカレンダー出力したい)

HTML::Templateでカレンダー出力したい

このQ&Aのポイント
  • Calendar::SimpleとHTML::Templateを利用しtableタグを使ったカレンダー表示を行いたい
  • 1週間ごとに<tr>タグで区切るループの記載の仕方がわからない
  • baseサブルーチンでは1週間ごとに<tr>タグで区切られたきれいなカレンダー表示がされるが、myplanサブルーチンでは日にちの数字が1週間ごとに区切られずに横並びとなってしまっている

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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>

perlerz10
質問者

お礼

ありがとうございます。おかげで正常に出力できる様になりました。 休み前に閲覧はできていたのですが、キーボード等テスト環境がそろわずお礼が遅れてしまいました。

関連するQ&A

専門家に質問してみよう