簡易BBS
MobaSiFを使って、書き込みと閲覧をできるBBSのできそこないを作ってみた。公開されているサンプルコードを参考にした。
作成手順をメモ。
BBSのためのデータベースとテーブルを作成
create database hato_bbs;
use hato_bbs
create table bbs (id int(11) auto_increment, name varchar(255), comment text, primary key(`id`));
$MOBA_CONF/main.confに設定
our ( $DB_BBS_W, $DB_BBS_R, $DB_BBS_BAK ) = ( 'BBS_W', 'BBS_R', 'BBS_BAK' ); %DA::CONF = ( 'BBS_W' => { HOST => 'localhost', DB => 'hato_bbs', USER => $_::MY_USER_W, PASS => $_::MY_PASS_W, TX => 1, RELEASE => 1}, 'BBS_R' => { HOST => 'localhost', DB => 'hato_bbs', USER => $_::MY_USER_R, PASS => $_::MY_PASS_R, TX => 0, RELEASE => 1}, )
ここに設定したものは、DA.pmで参照される。
BBS閲覧プログラム作成、
$MOBA_HOME/pm/bbs/bbs.pm package bbs::bbs; use strict; use MobaConf; use HTMLTemplate; use Common; use Request; use Response; use DA; use Kcode; use Jcode; sub pageMain { my $func = shift; my $rhData = {}; my $dbh = DA::getHandle($_::DB_BBS_R); my $sth = $dbh->prepare("select * from bbs order by id desc"); $sth->execute(); my $num = $sth->rows(); my @rows; while (my $h = $sth->fetchrow_hashref) { $h->{name} = jcode($h->{name},'utf8')->sjis; $h->{comment} = jcode($h->{comment},'utf8')->sjis; $h->{number} = $num; $num--; push @rows, $h; } $sth->finish; $rhData->{rows} = \@rows; my $html = HTMLTemplate::insert('bbs/bbs', $rhData); Response::output(\$html); } 1;
$MOBA_HOME/template/_system/bbs/bbs.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> <meta http-equiv="Cache-Control" content="no-cache"> <title>掲示板テスト</title> <link rel="stylesheet" type="text/css" href="/css/bbs.css"> </head> <body> <div class="regist"> <form action="_regist" method="POST"> 名前:<br> <input type="text" name="name" size="15"><br> コメント:<br> <textarea name="comment" rows="3" cols="20"></textarea> <br> <input type="submit" value="送信"> </form> </div> <hr> <div class="comment_list"> $ loop (rows) { $ <div> <p> $=h:number$.名前:$=h:name$<br> $=h:comment$ </p> </div> <hr> $ } $ </div> </body> </html>
$MOBA_HOME/conf/pages.confで設定する。
our %PAGE = ( 'bbs' => [0,0,0, 'bbs::bbs', 'pageMain'],
formタグから呼ばれる書き込みプログラムを作成
package bbs::regist; use strict; use MobaConf; use HTMLTemplate; use Common; use Request; use Response; use DA; use Kcode; use Jcode; sub regist { my $func = shift; my $rhData = Common::cloneHash($_::F, '^[a-z]'); $rhData->{name} = jcode($rhData->{name},'sjis')->utf8; $rhData->{comment} = jcode($rhData->{comment},'sjis')->utf8; my $dbh = DA::getHandle($_::DB_BBS_W); my $sth = $dbh->prepare("insert into bbs (name,comment) values (?,?)"); $sth->execute($rhData->{name}, $rhData->{comment}); $sth->finish; Response::redirect("http://$ENV{SERVER_NAME}/_bbs"); } 1;
$MOBA_HOME/conf/pages.confに設定。
'regist' => [0,0,0, 'bbs::regist', 'regist' ] , 'bbs' => [0,0,0, 'bbs::bbs', 'pageMain'],
テンプレートのコンパイルと再起動
rootになってテンプレートをコンパイルする。
$MOBA_HOME/script/tool/compile_template
あとapacheの再起動。これはプログラムの変更を反映するため?
アクセス
「http://*******/_bbs」に接続。
書き込みフォームが表示されているので、名前とコメントを書き込んで送信すれば保存される。保存されたメッセージは、書き込みフォームの下に表示されるようになる。