CGI-BBS > 情報収集 > フォームメール > フォームメールの改造でレイアウトを変更できるようにしたい。


カレッヂ
カレッヂ


質問者 小野塚貴弘  投稿日 9/22(月) 13:03:01
現状出回っているフォームメールは、確認画面やエラー発生時に表示される場合、
メッセージが表示されるだけのものばかりです。
もし宜しければ、確認画面やエラー発生時に表示される画面をHTMLのテンプレート
を使って表示させるためのフォームメールを作るにはどうしたらよいのか教えてい
ただけませんでしょうか?
もしくは、本件に準じたCGIが配布されているようなサイトがありましたら教えて
いただけませんでしょうか?

よろしくお願いします。

プロバイダ参照:http://j-navi.com/
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:Dreamweaver
FTPソフト:NextFTP
サーバ移転:していない
改造:している
CGI習熟度:middle

回答者 domo  [削除]  投稿日 9/23(火) 01:23:33
Perl でしたら HTML::Template モジュール があります。
原理的にはテンプレートHTMLに特殊な記号を埋め込みその部分をPerl側で変換して表示します。
簡単に自前で実装すると下記のような感じ

--temp.html--
<html><head></head>
<body>
ここに変数1を表示 ==> __VAR1__ <br>
ここに変数2を表示 ==> __VAR2__ <br>
</body>
</html>

-- test.cgi --
#!/usr/bin/perl

($VAR1, $VAR2) = ('変数1の内容', '変数2の内容');
%temp = ('VAR1'=> $VAR1, 'VAR2'=> $VAR2);

print "Content-Type: text/html\n\n";

open F,"<temp.html";
while (<F>){
 s/__(.+?)__/$temp{$1}/g; #ここで変数の置き換え
  print;
}
close F;

これをフォームメールに実装するにはフォームデータが渡ってきたときに
上記のようなかんじでHTMLを読み込んで変数展開するコードを組み込めばいいでしょう。
質問者 小野塚貴弘  [削除]  投稿日 10/20(月) 14:12:02
下記のようなCGIを作ってみましたが、サーバーエラーになってしまいます。
お手数ですが、どのようにしたら良いのか教えていただけませんでしょうか?

----------topic.html---------
<HTML>
<BODY>
<CENTER>
<HR>
__BACK__<BR>
</CENTER>
</BODY>
</HTML>

----------topic.cgi---------

#!/usr/bin/perl

#■トピックスファイル
$tmp = 'topics.html';

#■携帯の戻り先URL
$url = '../m/menu.html';


#↑↑↑↑↑↑↑↑設定はココまで↑↑↑↑↑↑↑↑

#----------------#
#  ブラウザ判別  #
#----------------#
$HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'};
if ($HTTP_USER_AGENT =~ /DoCoMo/i)
  { &imode; }      #imode用
elsif ($HTTP_USER_AGENT =~ /J-PHONE/i)
  { &jsky; }     #jphone用
else
  { &pc; }      #パソコン用

exit;

#----------------#
#  携帯表示部   #
#----------------#

sub imode{ 
print "Content-Type: text/html\n\n";
open F,"<$tmp";
print "<CENTER><A HREF=\"$URL\">戻る</A>\n";
}
close F;
}

#----------------#
#  j-sky表示部   #
#----------------#

sub jsky{ 
print "Content-Type: text/html\n\n";
open F,"<$tmp";
print "<CENTER><A HREF=\"$URL\">戻る</A>\n";
}
close F;
}

#----------------#
#  PC表示部     #
#----------------#

sub pc{ 
print "Content-type: text/html\n\n";
}

このページは終了したので返信(回答)は書きこめません
 


Web裏技