作者: ねこ丸
日時: 2007/3/1(16:17)
  ねこ丸です。

# だからテンプレートにしろとあれほど(ry

Bruce. writes:

> while(my $row = $sth->fetchrow_hashref()){
>     print "<a href=\"$row->{link}\">$row->{title}</a>\n";
>     if($row->{logo}){
>         print "<p><img src=\"$row->{logo}\">$row->{subtitle}</p>\n";
>     }elsif($row->{icon}){
>         print "<p><img src=\"$row->{icon}\">$row->{subtitle}</p>\n";
>     }else{
>         print "<p>$row->{subtitle}</p>\n";
>     }
>     print "<p>$row->{updated}</p>\n<hr>\n";
> }

  テンプレートを使っていれば少なくとも subtitle のくり返しは避けられる
と思います。要はこういう雰囲気の HTML の断片がくり返し出力されるんです
よね?

  <a href="{link}">{title}</a>
  <p>[[<img src="{img}">]]{subtitle}</p>
  <p>{updated}</p>
  <hr>

  {} の部分がプレースホルダだと思ってください。

  で、問題は [[ ]] で囲んだ部分で、この中のプレースホルダにセットされる
値がない場合は、そのブロックそのものが消えてしまうようにテンプレートの
方を書いておけば、logo も icon も存在しない場合に対応できます。(多くの
テンプレートエンジンにそういう機能がありますが、記述方法は当然テンプレー
トエンジンごとに異なります。)

  で、あとは img src に当たる部分ですが、これはみなさんお分かりの通り

  ( logo ) ? logo : ( ( icon ) ? icon : null とか undef とか )

  こんな感じの値にして、あとは link, title, img, subtitle, updated をテ
ンプレートにぶちこむ処理がぐるぐる回ればよいのではないかと。端折りまくっ
てますが雰囲気で補完してください(^^;

  要は値を print するよりもテンプレート使った方がデザインの意図を明確に
しやすいし、それに応じてコードの方で工夫する際も考えやすいんじゃないで
すかねぇというお話でした。

# もしかして思いっきり誤解というか曲解している可能性もあります。

--
    ねこ丸