【perlメモ】Text::MicroTemplateモジュールはやっぱり便利だった。

関連記事:【perlメモ】Text::MicroTemplateモジュールを使ってみる。 – KUMA TYPE

上の記事で、自分ひとりでプログラムを開発する分にはあんまりいらないかもと思っていたが使い慣れてくるとやっぱり使った方がいろいろ便利だという結論に至った。

どういう場合に便利なのか実例を挙げて説明したいと思う。

例えば最近作成したサイト『楽ツール』は、Text::MicroTemplateを使って作成している。今まで作ったものはソース内にHTMLをべた書きにして作っている。楽ツールのトップページと「最近チェックされた商品の一覧」のページではほぼ同じ処理で表示内容が違うだけなのでトップページのプログラムをコピーしてテンプレートを少し修正しただけで作ることが出来る。プログラム部分はほとんど弄る必要がない。

 

20100622
楽ツールのトップページ

20100624
楽ツールの「最近チェックされた商品の一覧」 ページ

また、チェックボックスやラジオボタンなどの処理が凄く処理しやすくなる。HTMLソースの中に直接コードを書けるので見通しが凄く良い。関数にすればもっと見通しがよくなるだろう。今までだと、あらかじめチェックボックスのon/offの処理をHTMLの外でしておいて、その結果を変数に入れておいてチェックボックスのon/offの処理をする必要があった。複数ある場合はその分の変数を用意してHTMLの外でたくさんの処理をあらかじめしておかなければいけなかったのが無くなるのが大きい。チェックボックス分の変数または配列を用意しなくてよくなった。

変数の節約と見通しをよくするためにチェックボックスの処理ごとのHTMLを細切れにして変数を使いまわしたりしていた事もあったがそういうのもなくなるのはいい。

<tr>
    <td nowrap>リンク方法</td>
    <td>
        <input type="radio" name="TARGET" value="1" <?= ($r->{TARGET} eq ‘1’)?’checked’:”; ?>> 別ページ
        <input type="radio" name="TARGET" value="2" <?= ($r->{TARGET} eq ‘2’)?’checked’:”; ?>> 同じページ
    </td>
    <td>リンクをクリックしたときに別ページで開くか、同じページに開くかを指定する事が出来ます。</td>
</tr>
<tr>
    <td nowrap>ボーダーサイズ</td>
    <td>
        <input type="radio" name="BORDER" value="0" <?= ($r->{BORDER} == 0)?’checked’:”; ?>> 0(無し)
        <input type="radio" name="BORDER" value="1" <?= ($r->{BORDER} == 1)?’checked’:”; ?>> 1
        <input type="radio" name="BORDER" value="2" <?= ($r->{BORDER} == 2)?’checked’:”; ?>> 2
        <input type="radio" name="BORDER" value="3" <?= ($r->{BORDER} == 3)?’checked’:”; ?>> 3
        <input type="radio" name="BORDER" value="4" <?= ($r->{BORDER} == 4)?’checked’:”; ?>> 4
        <input type="radio" name="BORDER" value="5" <?= ($r->{BORDER} == 5)?’checked’:”; ?>> 5
    </td>
    <td>画像の周りの枠線の幅を指定します。</td>
</tr>

 

具体的に今までのやり方を書いておくと以下の様な感じになる。HTMLの上の部分でまとめてやるか、項目ごとに細切れにやるかで見通しや変数の使いまわしが出来るか等が変わってくるが、実際の処理部分と表示部分が分かれるので見通しがよくないのと見た目がエレガントではない。後で見たときにも見づらい。

my @check = ();
$check[$TARGET]=’checked’;

print <<"EOF";
<tr>
    <td nowrap>リンク方法</td>
    <td>
        <input type="radio" name="TARGET" value="1" $check[1]> 別ページ
        <input type="radio" name="TARGET" value="2" $check[2]> 同じページ
    </td>
    <td>リンクをクリックしたときに別ページで開くか、同じページに開くかを指定する事が出来ます。</td>
</tr>
EOF

@check = ();
$check[$BORDER]=’checked’;

print <<"EOF";
<tr>
    <td nowrap>ボーダーサイズ</td>
    <td>
        <input type="radio" name="BORDER" value="0" $check[0]> 0(無し)
        <input type="radio" name="BORDER" value="1" $check[1]> 1
        <input type="radio" name="BORDER" value="2" $check[2]> 2
        <input type="radio" name="BORDER" value="3" $check[3]> 3
        <input type="radio" name="BORDER" value="4" $check[4]> 4
        <input type="radio" name="BORDER" value="5" $check[5]> 5
    </td>
    <td>画像の周りの枠線の幅を指定します。</td>
</tr>
EOF

 

タグ : , ,