OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ループが可能なHTMLテンプレートを切り離せるperlスクリプト

  • すぐに回答を!
  • 質問No.180209
  • 閲覧数250
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 95% (45/47)

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

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

  • 回答No.3
レベル11

ベストアンサー率 67% (126/186)

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さんが紹介されているモジュールも上に書いたようなルーチンをパッケージ化したものだと思われます。
なお上のスクリプトはささっと書いたのでコマンドのつづり間違い等があるかも知れませんがご容赦下さい。
お礼コメント
Ants

お礼率 95% (45/47)

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

oodaikoさんありがとうございました。
早速試してみます。
投稿日時 - 2001-12-07 23:07:10
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル9

ベストアンサー率 53% (41/76)

>そのとき、たとえば掲示板のように、ループ部分があっても、そのテンプレートがつかえるようにしたいのですが、そのような、スクリプトをご存知の方いらっしゃいましたら、どうか教えてください。 そのような汎用のスクリプトはしらないのですが…。 例えばこんな風にしたらどうでしょう? template1 : ページのヘッダー部分(掲示板であればタイトル部分ぐらいまで) tepmlate2 : 繰り返 ...続きを読む
>そのとき、たとえば掲示板のように、ループ部分があっても、そのテンプレートがつかえるようにしたいのですが、そのような、スクリプトをご存知の方いらっしゃいましたら、どうか教えてください。

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

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

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

しかし、この設計だとページ内で複雑にTABLEタグが入り組んでるような構造だと使えないかもしれません。
お礼コメント
Ants

お礼率 95% (45/47)

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

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

ありがとうございました。
もうちょっと検討してみます。
投稿日時 - 2001-12-06 10:50:36


  • 回答No.2
レベル12

ベストアンサー率 75% (398/526)

HTML::Templateモジュールを使うと、簡単に実現することができます。 下記サイトで勉強してみてはいかがでしょうか。 ...続きを読む
HTML::Templateモジュールを使うと、簡単に実現することができます。
下記サイトで勉強してみてはいかがでしょうか。
お礼コメント
Ants

お礼率 95% (45/47)

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

モジュールがレンタルサーバーで使えるか?など勉強しなければいけない部分がありますが、やってみます。
がんばります。
投稿日時 - 2001-12-07 00:49:40
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ