はじめまして、いつも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と関連する良く見られている質問

QFC2 ブログのどこに 『人気ブログランキング』のタグをはったかわからなくなってしまいました

お助けください。

ずいぶん前に『人気ブログランキング』のタグを自分のFC2ブログのどこかに張りました。

ブログの全記事に自動的に表示される設定です。

今日、外そうと思って、テンプレートを見たのですが、テンプレートのどこにもタグが見当たりません。

テンプレートに貼ったと思いこんでいたのに、自分でどこに貼ったのかわからなくなってしまいました。

テンプレート以外で、全記事表示をさせる方法ってあるのでしたっけ??

すみません。

Aベストアンサー

プラグインで貼ったのではありませんか?
フリーエリアプラグインです。

Qperl内のhtml文を、ループさせたいのですが、これってできないんでしょうか?

たびたび申し訳ありません。周りに聞く人もいなく、まったくの初心者ですので、なにとぞお願いいたします。
下記の「ここから~ここまで」の$iの値を変えながらループさせたいのですが、まったくうまくいきません。なにかいい方法あったら教えてください。
それとも、こんな書き方じゃダメなんでしょうか?

#!/user/bin/perl
open(IN,"data.csv");
#flock IN,2;
@line = <IN>;
#flock IN,8;
close(IN);
$cnt = 0;
foreach(@line){
($sina[$cnt],$jpg[$cnt],$pr[$cnt],$kakaku[$cnt]) = split(/\,/,$_);
$cnt++;
}

print<<"EOF";
Content-type: text/html

<HTML>
<HEAD>
<TITLE>やぁ!</TITLE>
</HEAD>
<BODY>
EOF
###################ここから
print<<"EOF";

<TABLE border="1">
<COL span="4" width="100">
<TBODY>
<TR>
<TD width="300">$sina[$i]</TD>
<TD width="300">$jpg[$i]</TD>
<TD width="300">$pr[$i]</TD>
<TD width="300">$kakaku[$i]</TD>
</TR>
</TBODY>
</TABLE>
EOF
##################ここまで
print<<"EOF";

</BODY>
</HTML>
EOF

たびたび申し訳ありません。周りに聞く人もいなく、まったくの初心者ですので、なにとぞお願いいたします。
下記の「ここから~ここまで」の$iの値を変えながらループさせたいのですが、まったくうまくいきません。なにかいい方法あったら教えてください。
それとも、こんな書き方じゃダメなんでしょうか?

#!/user/bin/perl
open(IN,"data.csv");
#flock IN,2;
@line = <IN>;
#flock IN,8;
close(IN);
$cnt = 0;
foreach(@line){
($sina[$cnt],$jpg[$cnt],$pr[$cnt],$kakaku[$cnt]) = split(...続きを読む

Aベストアンサー

ループさせたいのなら、ループの命令を使いましょう(^^;
for ($i=0; $i<@sina; $i++) {
  # ここから
    :

  # ここまで
}

 ただこれだとテーブルがたくさん出来てしまうので、makitoさんが回答されているように、<TR>~</TR>のループでいいような気もしますが。

Qオーサリングソフトを購入しようと思っているのですが、ランキングで検索す

オーサリングソフトを購入しようと思っているのですが、ランキングで検索すると
同じソフトでも、特別優待版、通常版、アカデミック版、アップグレード版と色々あるのですがそれの違いを教えてください。
自分としてはテンプレートが豊富でカスタマイズ可能なソフトをできるだけ低料金で購入したいと考えています。アドバイスお願いします。

Aベストアンサー

「通常版」は文字通りで、価格は一番高くなります。
「特別優待版」は他社の同じタイプのソフトを持っている場合、そのソフトから乗り換えることができるというもので、他社製品からの乗り換えを誘うために価格は少し安くなります。ただし注意しなければならないのは、ソフトによっては単体でインストール出来るものもあれば、他社製品のシリアル番号が必要だったりするものもありますので、購入する前にしっかり確認して下さい。
「アップグレード版」はそのソフトの前のバージョンを持っており、それからアップグレードするためのパッケージで、基本的には以前のバージョンがなければインストールできないので注意してください(なぜか単体でインストール出来ちゃったりするものもあったりしますが…)。値段は「特別優待版」とほぼ変わりません。
最後に、「アカデミック版」は教員や学生のための優待版で、機能は通常版と全く変わらず、値段も全種類の中で一番安いので、教員或いは学生であることを証明するものを持っていれば、これが一番お買得であることは間違いありません。

Q【perl/cgi】文字列を検索して、その個数を数えたい

はじめまして、perlをはじめて1週間のものです。
本やwebサイトをみてあくせくしております。

【本題】
あるtxtファイルを読み込んで、そのファイル中に該当の文字列がいくつあるかを
数え、webの画面に出そうとしております。
具体的には、txtファイルは
routerCisco
switchHitachi
router Sumitomo
router Juniper
hubmelco
routeracton
switchextream

これを読み込んで、ルータやスイッチ、ハブの数を出したいのです。
webにあらわす方法は、先達の先輩たちのsourceを見て、下のようにヘッダ/フッダ
は、作れそうなのですが、肝心の本体がどうにもわかりません。

なにか良い方法ありませんでしょうか。
読み込むべき機器台数ファイルは、別箇所に保存してあるものなのでopenとかでもって
くるんだろうなという位しか、、、、。

どうぞよろしくお願いします。

Aベストアンサー

@count = (0,0,0);
open(OF,"<hoge.txt");
while(<OF>){
($group,$name) = split(/\s/,$_);
if($group eq "hub"){ $count[0]++; }
elsif($group eq "router"){ $count[1]++; }
elsif($group eq "switch"){ $count[2]++; }
}
close(OF);
print "hub : $count[0]<br>\n";
print "router : $count[1]<br>\n";
print "switch : $count[2]<br>\n";

テストしてみると動かなかった上におかしかったので修正。

Q記事アクセスランキングをつけたいのですが・・・

自作PHP BLOGを製作中です。

記事ランキングをつけたいのですが、よいPEARライブラリなどは
ありますでしょうか?

SmartyとPHP5を使っています。

1.ページ毎のアクセスログをとる
2.その値を記事ごとに取得する
3.テンプレート上にその記事を表示する

という流れかと思います。

よろしくお願いします。

Aベストアンサー

ログが独自に必要になりそうですから、PHPではきびしそうですね。
.htaccessでログをきりわけて、webalizerあたりで解析してみては?

Q私用PCに開発環境を作成しようと、perlのダウンロード方法がわかりません

私用PCに開発環境を作成しようと、apache2とphp5は何とかインストールできたのですが、perlのダウンロード方法がよくわかりません。一度できたと思いダウンロードしたら、「インストールパッケージをひらくことができません・・・」というメッセージがでました。インストール方法の検索でもどれも実際ダウンロードするサイトの画面が変わっていて、英語なのでよくわかりません。
詳細にダウンロードする手順を教えていただけないでしょうか?
http://www.activestate.net/

Aベストアンサー

Downloadsをクリック

最下部の「ActivePerl 5.8.8.822 and ActivePerl 5.6.1.638」をクリック

右上の「Get Active Perl」のボタンをクリック

一番上の「Active Perl」の項目の「Download」をクリック

各項目に記入(名、姓、メールアドレス、国名)して、Continueをクリック

リストからバージョンとOSを選んでダウンロード

でokです。
Windowsなら「Windows」の「MSI」をダウンロードすればインストーラー付きの物がダウンロードできます。

QFC2ブログランキングについて教えてください!

いつもお世話になっています。
FC2ブログランキングに参加するため、リンクURL・リンクタグを取得し、リンク用バナーも取得したのですが、テンプレートに貼り付ける方法がマニュアルを読んでもわかりませんでした。
(ブログはFC2で作成しました。)

初歩的な質問なのは重々承知していますが、色々と試してみても自分では出来なかったため、教えていただけないでしょうか?
宜しくお願いします。

Aベストアンサー

貼り付けは記事作成のページで本文の一つ上にある

”WYSIWYGテキストエディター機能をオフにする”

にして行います。

ここをクリックすると文章だけではなく、英字やら記号やらが

入り混じっている状態になります。


この画面でバナーを挿入したい場所にリンクURL・タグを貼り付けて
ください。

QApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!に関係なく実行できるようにするには。

ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!のPerlを動かす場所(?)を指定する行が無かった場合や、違う場合でも、Apachが勝手にperlの場所を解釈しスクリプトを実行してくれるようになるhttpd.confの設定方法ってありますか?

Aベストアンサー

> CGI(Perl使用)の部分もあるので、ローカルで実際に動かしてからサーバにアップしています。
> ローカルでの実行環境がApach(for win32)+ActivePerlで、サーバにアップするときにわざわざ#!部分を変更しなければなりません。それが少々めんどくさいので
> 質問したわけであります。

発想の転換をしてみてください。
要するに「she-bang 書き換えが面倒くさい」だけなんですよね?

Apache に依存させるのではなく、ActivePerl を入れなおして、ディレクトリをあわせてみてはいかがでしょうか。
ActivePerl をインストールする際に、例えばサーバ側が
/usr/bin/perl
だった場合、
c:\usr
フォルダを作っておいて、インストール先を c:\usr にしておけば、perl インタプリタの実行ファイルが c:\usr\bin\perl.exe になります。
she-bang を #!c:\usr\bin\perl とすればいいのは勿論なんですが、Apache を介せば、UNIX 表記でも問題ないので、#!/usr/bin/perl と記述することが可能です。当然それなら、いちいち書き換えなくても、サーバ側でそのまま利用することが可能です。

コツとしては、perl のパスの bin ディレクトリの上位まで、Windows 上に作っておいて、インストール先として、そこまで指定します。

/usr/local/bin/perl としたい場合は、c:\usr\local フォルダを作っておいて、インストール先として c:\usr\local を指定すれば、自然と bin ディレクトリが作られ、その中に perl.exe がインストールされます。
で、CGI として使用したいファイルの先頭を
#!/usr/local/bin/perl とすれば、サーバでも Win 環境でも共用できる she-bang が書けますので、そういうことを気にしなくてもいいと思います。
私はかれこれ 3 年間、この方法を使ってます。

> CGI(Perl使用)の部分もあるので、ローカルで実際に動かしてからサーバにアップしています。
> ローカルでの実行環境がApach(for win32)+ActivePerlで、サーバにアップするときにわざわざ#!部分を変更しなければなりません。それが少々めんどくさいので
> 質問したわけであります。

発想の転換をしてみてください。
要するに「she-bang 書き換えが面倒くさい」だけなんですよね?

Apache に依存させるのではなく、ActivePerl を入れなおして、ディレクトリをあわせてみてはいかがでしょうか。
A...続きを読む

Q完全自作ブログテンプレート

完全自作のブログテンプレートを作りたいと思っています。FC2でブログをやっています。一応ヤフーやグーグルで『ブログ テンプレート』と検索するとテンプレートの素材集とかしか出てきません。ブログテンプレートを自分でスタイルシートを変える方法は出てくるのですがそうではなく、自分で作って、FC2共有テンプレートに載ッけたいのです。『完全自作』テンプレートを作る方法を教えてください。

Aベストアンサー

 すみません、お節介かもしれませんが…

 まず、配布されているソフトを使って作成したテンプレートは「完全自作」とは言いません。
 特別に許可されていない限り、必ずテンプレート内にソフトの提供元を記載する必要があり、また、提供元が共有テンプレートへの登録を禁じている場合は登録できません。
 「完全自作」と胸を張って言えるのは、全てのソースコードを自力で打ち込んだものだけである、ということは、どうか心に留めておいて下さい。

 次に、「簡単で、個性に溢れたテンプレートを作ってくれるソフト」というものは…申し訳ありませんが存じ上げませんし、そんなものが存在するとはとても思えません。
 そもそも、「個性に溢れたテンプレート」とは、作者が頭を捻り、センスを駆使して作り上げるものであり、適当に打ち込めば魔法のように出てくるものではないからです。

 また、そういったソフトが存在するとして、それに頼ることには危険もあります。
 個性的なテンプレートは、ブラウザの互換性に問題を抱えることが多いです。Internet Explorerでは正常に見えても、Firefoxからは読めないほどデザインが崩れてしまうこともあるのです。
 また、どのブログであれ独自変数を多数使用しており、仕様の改変も行われます。それに対応できず、不具合を起こす記述がないとは言い切れません。
 きちんと技術を身につけていれば原因を発見して対応できますが、ソフトに頼りきりでは、いざという時に自力での解決ができません。

 以上のことから、もしもそのような都合の良いソフトが存在したとしても、使うことはお勧めできません。
 やはり、「一から自分で書く」ことが一番です。遠回りに見えても、HTMLやCSSをきちんと理解することが結局は自分(のブログ)のためになりますよ。

 さて、散々苦言を呈しましたが、最後に一つ、私の知っているFC2用のテンプレート作成ツールをご紹介しておきます。

http://fc2blogshop.blog13.fc2.com/

 ここの「CSSジェネレーター」というツールです。
 もしかして、これの話を誤解されているということはありませんか?
 ただ、「個性的なテンプレート」とは言い難いですし、このツールで作成したテンプレートの共有登録は規約で禁止されていますので、質問者様がお聞きのものとは違うかもしれません。

 長文ご容赦下さい。ご参考までに。

参考URL:http://fc2blogshop.blog13.fc2.com/

 すみません、お節介かもしれませんが…

 まず、配布されているソフトを使って作成したテンプレートは「完全自作」とは言いません。
 特別に許可されていない限り、必ずテンプレート内にソフトの提供元を記載する必要があり、また、提供元が共有テンプレートへの登録を禁じている場合は登録できません。
 「完全自作」と胸を張って言えるのは、全てのソースコードを自力で打ち込んだものだけである、ということは、どうか心に留めておいて下さい。

 次に、「簡単で、個性に溢れたテンプレートを作って...続きを読む

QPerlのCGIでフォームのテキスト配列をPerlで取得するには?

フォームで通常は同じ名前のデータを取得することは無いのですが
表計算のように同じ名前の場合、データの取り出し方がわかりません。
以下、通常の1件の場合のソースです。


#!/usr/bin/perl

$| = 1;

use strict;
our %in;

use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
require 'jcode.pl';
require 'cgi-lib.pl';
#

#-----分岐-----

&ReadParse;

# 配列でない場合
my $namae = $in{'namae'}
print "$namaeで名前が1件表示される";
# これをフォームで namaeが配列になった場合、
#<input type="text" name ="namae">
#<input type="text" name ="namae">
#<input type="text" name ="namae">
# のような場合、3件取得する場合

exit;

__END__

フォームで通常は同じ名前のデータを取得することは無いのですが
表計算のように同じ名前の場合、データの取り出し方がわかりません。
以下、通常の1件の場合のソースです。


#!/usr/bin/perl

$| = 1;

use strict;
our %in;

use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
require 'jcode.pl';
require 'cgi-lib.pl';
#

#-----分岐-----

&ReadParse;

# 配列でない場合
my $namae = $in{'namae'}
print "$namaeで名前が1件表示される";
# これをフォームで namaeが...続きを読む

Aベストアンサー

パラメータのデコード処理で使用するモジュールによって、やり方は変わってきますが、cgi-lib.pl と CGI.pm の場合は下記のようになります。

cgi-lib.pl :
 対象のパラメータが収納された変数を \0 を区切り文字として分割する。

CGI.pm :
 リストコンテキストで値を受け取る。


例) cgi-lib.plを使う場合 ----------------------------
require "cgi-lib.pl";

&ReadParth; # デコード処理
@hoge = split(/\0/, $in{hoge}); # \0 で分割
------------------------------------------------

例) CGI.pmを使う場合 --------------------------------
use CGI;

$query = new CGI; # 新しいCGIオブジェクトの作成
@hoge = $query->param('hoge'); # パラメータhogeの内容の受け取り
------------------------------------------------

参考URL:http://www.futomi.com/lecture/form/cgilib.html#3.2,http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_THE_VAL

パラメータのデコード処理で使用するモジュールによって、やり方は変わってきますが、cgi-lib.pl と CGI.pm の場合は下記のようになります。

cgi-lib.pl :
 対象のパラメータが収納された変数を \0 を区切り文字として分割する。

CGI.pm :
 リストコンテキストで値を受け取る。


例) cgi-lib.plを使う場合 ----------------------------
require "cgi-lib.pl";

&ReadParth; # デコード処理
@hoge = split(/\0/, $in{hoge}); # \0 で分割
---------------------------------------...続きを読む


人気Q&Aランキング

おすすめ情報