最新閲覧日:

はじめまして、いつもphpをつかっててperlの知識がない者です。
perlの中にHTML部分を記入するとコードが読みにくくなるので別ファイル(テンプレート)として切り離したいのです。
そのとき、たとえば掲示板のように、ループ部分があっても、そのテンプレートがつかえるようにしたいのですが、そのような、スクリプトをご存知の方いらっしゃいましたら、どうか教えてください。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Antsさんこんばんは。

掲示板ソフトではそういう目的のために定番になっている手法があります。
モジュールがなくても大丈夫です。おそらくモジュールも同じようなことをやっているはずです。
例えば次のようなファイルをtemplate.htmlという名前で保存します
****************************************************

<html>
<head>
<title><!--title--></title>
<meta http-equiv="Content-Type" content="text/html; charset=<!--charset-->">
<meta http-equiv="Pragma" content="no-cache">
</head>

<body bgcolor="#<!--bgcolor-->" text="#<!--textcolor-->">
<h1><font color="#<!--fontcolor-->"><!--owner-->さんの掲示板</b></font></h1>
<!--begin-->番目から<!--end-->番目までの記事を表示しています<br>

<!--message-->

<hr>
<form action="BBS.cgi">
<input type="hidden" name="Next" value="<!--nextpage-->">
<input type="submit" value="次のページへ">
</form>
</body>
</html>

******************************************************************

そしてスクリプトの中で$title,$charset,$bgcolor,$textcolor等の変数を用意しておき

*****************************************************************

open (IN,"template.html");
print "Content-type: text/html\n\n";
while(<IN>){
  s/<!--title-->/$title/;
  s/<!--charset-->/$charset/;
   ・
   ・
   ・
 s/<!--message-->/$message/;
   ・
   ・
   ・
 s/<!--nextpage-->/$nextpage/;
 print ;
}

*******************************************************************
と置き換えていけばお望み通りのことができます。
ただし$messageの部分は1行ではすまないのでこの部分はスクリプトであらかじめ作ってやる必要があります。
例えばログファイルLOG.txtが
投稿者名:投稿日:内容
という書式で記録してあるとすれば

******************************************************************

open (INC,"LOG.txt");
$message="";
while(<INC>){
 ($name,$day,$mes)=split(':',$_);
  $message = "$message" .
"<table>\n
<tr><td>$name</td><td>$day</td></tr>\n
<tr><td colspan="2">$mes</td><tr>\n
</table><br>\n";
}

*****************************************************************
などとやります。leaz024さんが紹介されているモジュールも上に書いたようなルーチンをパッケージ化したものだと思われます。
なお上のスクリプトはささっと書いたのでコマンドのつづり間違い等があるかも知れませんがご容赦下さい。
    • good
    • 0
この回答へのお礼

なるほど、$messageの部分にあらかじめループ部分を入れておくのですね。
あとは変数<!--変数-->部分をおきかえてやればいいのですね。
<!--変数-->といったフォーマットにしているのは僕みたいにドリームウェーバーなどのソフトを使っている人にとって大助かりです。

oodaikoさんありがとうございました。
早速試してみます。

お礼日時:2001/12/07 23:07

HTML::Templateモジュールを使うと、簡単に実現することができます。


下記サイトで勉強してみてはいかがでしょうか。

参考URL:http://member.nifty.ne.jp/hippo2000/perltips/htm …
    • good
    • 0
この回答へのお礼

ありがとうございます。
まさに私の探していたものです。

モジュールがレンタルサーバーで使えるか?など勉強しなければいけない部分がありますが、やってみます。
がんばります。

お礼日時:2001/12/07 00:49

>そのとき、たとえば掲示板のように、ループ部分があっても、そのテンプレートがつかえるようにしたいのですが、そのような、スクリプトをご存知の方いらっしゃいましたら、どうか教えてください。



そのような汎用のスクリプトはしらないのですが…。
例えばこんな風にしたらどうでしょう?

template1 : ページのヘッダー部分(掲示板であればタイトル部分ぐらいまで)
tepmlate2 : 繰り返し部分
template3 : ページのフッター部分

このように3分割しておけば、かなり汎用的に使えるはずです。
プログラム内ではまずヘッダー部分のテンプレートを使い、続いて繰り返し処理ではtemplate2を使う、最後にtemplate3から生成したデータを出力すればお望みの動作になると思います。

しかし、この設計だとページ内で複雑にTABLEタグが入り組んでるような構造だと使えないかもしれません。
    • good
    • 0
この回答へのお礼

なるほど、
完全なHTMLとしない方法ですね。
ドリームウェーバーなどのHTMLソフトを使いたいのでできればさけたいのですが、、
でも逆に、こうやったほうが、さくさく動きやすいのでしょうね。

複雑にループっていうのはたぶんないと思います。
ループのネストは無いです。

ありがとうございました。
もうちょっと検討してみます。

お礼日時:2001/12/06 10:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報