サイト移転4: Joyful Note7.2改造

2025/09/27

ウェブサイト関連

(おもちゃ箱 2021.3.9)
  ●参考にしたスプリクトやWebサイトはページ下部に。
もっと具体的に書いた方がいいのかなぁと思って、コードを追記。(2021年3月12日)

 さて、ローカル環境が整ったので、これで思う存分「エラー」が出ても気にせずに掲示板プログラムを改造できる。いや、エラー出したいわけじゃないけど。
 まずはローカル環境にオリジナルのJoyful Noteを設置する。初投稿が2020年10月12日で、色々書き込みテストで問題ないのを確認してから改造に入る。モバイルファーストという時勢のため、CSSはモバイル表示を先に書き換えた。また掲示板表示画面はテンプレート式なので、レイアウトはHTMLを自分の好みに変える。
 そしてCGIの改造。私はPerlの知識なんてほぼ無い。今までだってせいぜいレイアウト変えたりした程度。CGIの記述の意味がわからないから、ネットの検索でひたすら調べてなんとなくアタリを付けて書いたりする程度。人様の作ったスプリクトをチョロチョロいじるのが精一杯。Perlチートシートなんてものを見つけて、プリントアウトしてスプリクトを必死に解読するとか。
 当然、今回も検索するのだが、出てくる結果は古い。改造のベース元のバージョンが古くて有益ではない。古いバージョンではファイル構成が違うのだ。全盛期(ひと昔以上だよね)と違い、今時はCGI掲示板をわざわざ設置しようなんて思う人は少ないから、当然新しい情報も少ない。
 そして社会人1年目の息子はシステムエンジニアの卵だが、Javaとjavascriptしか分からない。あ、あと卒業制作で使ったSwiftかな。
 それでも可能性を信じて、ひたすら単語を変えて検索し、さまざまなJoyful Noteの改造版をダウンロード。スプリクトを開いて参考になりそうな部分を探し出す。

1. Joyful Noteは、アクセスカウンタが無かった。以前はあったようだが、廃止されたよう。YY-BOARDの方はカウンタがついていたので、それを参考にinit.cgiとjoyful.cgiに書き加えるので簡単。後はカウンタ付けたいテンプレートのbss.htmlに記述加えるだけ。

2. 留意事項、は言葉が堅いので「使い方」にする。またポップアップウィンドウで開く形だとブラウザ側で拒否設定にしている場合があるから、テンプレートのbbs.htmlの記述を変えて通常リンクにする。
 ファイルの最大投稿サイズ、単位がバイトでは感覚的に分かりづらいのでMB(メガバイト)表示に。 joyful.cgiの留意事項表示504行目あたり close(IN); の後に、
my $size;
	$size = ($cf{maxdata} / 1048576) . 'MB';
	$tmpl =~ s/!maxdata!/$size/g;
なお、その下のバイト表示は#でコメントアウトしておく。削除でもいいけど。
# $tmpl =~ s/!maxdata!/$cf{maxdata}バイト/g;
バイト数をMB分の1048576(1024バイト=1KB、1024KB=1MB、だから1024×1024=1048576が1MB)で割った変数を指定してるわけ。これはTRANSFORMさんのJoyful Note v 7.21 PLUSを参考にさせていただいた。

3. 私以外で書き込む人なんて滅多に無いので、新規書き込みフォームはボタンクリックで開くようにした。これはオリジナルのトピック表示の際の形を参考にする。

(2025年6月14日:追記)  掲示板の方で質問があったりするので、詳細追記。
トップページの新規投稿フォームを、畳んだままにしておくのは「トピック表示」の時のボタンを利用すれば良い。
トピック表示
トピック表示の時

tmplフォルダ内のtopic.htmlをテキストソフトで開く。
オリジナルだと24行目からの、
<div class="new-btn">
 <input type="button" value="新規投稿" onclick="add_form();"></div>
が、このボタンなわけです。 この部分を、同じ tmpl フォルダ内の bbs.html の24行目かな、

<form action="!regist_cgi!" method="post" enctype="multipart/form-data">
これよりも上に、コピペすればOK。簡単、簡単。
テンプレートはhtmlで自由に作れるので、欲しいデザインを自分で作成して読み込ませましょう。
ちなみにオリジナルのtmplフォルダ内は14ファイルだが、私は正規ファイル改造のほか、新たに2つ作って16ファイルある。写真はローカルディスク上での状態。
ローカルでのファイル構成
(追記ここまで)

4. オリジナルはページ下部に記事Noを入力して修正・削除する形だが、これを利用して各記事ごとにそのボタンを付ける。bbs.html の記事No入力の部分を各記事のNoを代入する形にすればいいのでは?と思い、
オリジナルの
<form action="!regist_cgi!" method="post">
処理 <select name="mode">
<option value="log_edit">修正</option>
<option value="log_dele">削除</option>
</select>
記事No <input type="text" name="no" size="3" style="ime-mode:inactive">
暗証キー <input type="password" name="pwd" size="4" maxlength="8">
<input type="submit" value="送信">
</form>
6行目を、
<input type="hidden" name="no" value="!num!">
とし、<!-- loop -->から<!-- /loop -->までの間の希望する所に入れる。そして上記コードで指定したregist.cgiを認識させるために、joyful.cgiの記事表示部、189行目あたりmy $tmp = $loop;以下に
$tmp =~ s/!regist_cgi!/$cf{regist_cgi}/g;
を追加しておく。
レス記事についてもres.htmlを同様にする。joyful.cgiは175行目あたりのmy $tmp = $resloop; 以下。 なお過去ログにはこの編集ボタンは不要なので、新たにpast_res.htmlを作り、それをpast.html内で読み込む形にする。joyful.cgiの#過去ログ画面、675行目あたり、
open(IN,"$cf{tmpldir}/res.html") or error("open err: res.html");
open(IN,"$cf{tmpldir}/past_res.html") or error("open err: past_res.html"); 
と、すれば良い。
5. レス記事にも返信ボタンを付けたい、と思う。思うが、これは上手くいかなかった。ずいぶん試してみたが、どうやら私にはお手上げで、あきらめた。

6. メールアドレスをURLのようにアイコンへのリンクにした。フリー画像のアイコンを使ってみたが、のちにスパム書き込みがあった事で今後スパムメールが来る可能性を考え、メール表示は削除する。(これについては後日)

7. オリジナルでは過去ログは添付ファイルが削除される。おそらくはデータが膨大になる事を憂慮しての事だろう。が、私は残したかった。どうせ、たいして量が増えると思わないし。とりあえずregist.cgiの101行目あたり、添付ファイル削除の項を#でコメントアウトする。
# 添付ファイル削除
#    if ($ex2) {
#    unlink("$cf{imgdir}/$no2$ex2") if ($ex2);
#    unlink("$cf{imgdir}/$no2-s$ex2") if ($ex2 && -f "$cf{imgdir}/$no2-s$ex2");
#    }
 オリジナルの現行ログでの表示方法を移植して色々試したが、エラーばかり。他の手はと、掛け軸掲示板さんのkakejiku.cgiでの過去ログ画面を参考にさせていただいた。 joyful.cgiの過去ログ画面647行目あたり
$res{$reno} .= "$no<>$reno<>$date<>$nam<>$eml<>$sub<>$com<>$url<>$col\0";
を、
$res{$reno} .= "$no<>$reno<>$date<>$nam<>$eml<>$sub<>$com<>$url<>$hos<>$pw<>$col<>$ext<>$w<>$h<>$chk<>\0";
と、する。同じく710行目あたり、
my ($no,$reno,$date,$nam,$eml,$sub,$com,$url,$col) = split(/<>/, $log);
を、
my ($no,$reno,$date,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ext,$w,$h,$chk) = split(/<>/, $log);
とする。また表示形式は、オリジナルjoyful.cgiの添付リンクの項を参考にする。 joyful.cgiの過去ログ画面、706行と717行あたりにある
$url = qq|<a href="$url" target="_blank"><img src="$cf{cmnurl}/home.png" class="icon" alt="Home"></a>| if ($url);
の後に、それぞれ以下を加える。
my $w_att;
        if ($ext =~ /(jpg|png|gif)/) {  #画像の時
            $w_att .=  "<img src=\"$cf{imgurl}/$no-s$ext\"><br>";
            }    
        elsif ($ext =~ /pdf/) {  #画像以外の時
			my $size = -s "$cf{imgdir}/$no$ext" || 0;
			my $msize = sprintf ("%.1f", $size / 1048576).' MB';
			my $ksize = sprintf ("%.1f", $size / 1024) .' KB';
		if ($size > 1048576) {$w_att .= qq|<p><b>[<a href="$cf{imgurl}/$no$ext" target="_blank">添付ファイル:PDF</a>] $msize</b></p>|;}
		else {
			$w_att .= qq|<p><b>[<a href="$cf{imgurl}/$no$ext" target="_blank">添付ファイル:PDF</a>] $ksize</b></p>|;
        }
    }
自分が使用する上で画像は3種、テキストはPDFのみなので、上記のようになっている。その後に添付ファイルを表示するために、追加後にある
my $tmp = $restmpl;
my $tmp = $loop;に、
$tmp =~ s/!w_att!/$w_att/g; を加える。
そして past.htmlと、4.で作っておいた past_res.htmlの!comment!の後あたりに!w_att!を書き加える。
ローカルでテストしては直し、の繰り返しで上記のように落ち着いた。
 結局ローカルで過去ログの添付ファイル表示に成功したのは11月10日だった。
(さらっと書いたが、実際にはエラー、エラーで、ぐわああああっ!とわめきながら、ブツブツとあそこをこうすれば・・なんてつぶやきながら、ほぼ家事は最低限でやってた)

 とりあえず、ここまででWeb上にテスト掲示板を作り、運用してみる。文章の読みやすさなど line-height や padding 等、CSSも変えてみる。問題なさそうなので本番の掲示板を設置し、以前のログを読み込ませ、初投稿が11月27日。ローカルでの初投稿からひと月半か。
(もっと効率のいい方法があるんじゃないかと思うが、私にはこれで精一杯だ。はっきり言って自分でコードを晒すなんて非常に恥ずかしい。ど素人なのに。このページ書くのにcodeタグなんて、初めて使ったわ。つーか、codeタグの存在自体、知らなかったし)

8. RSSについては参考になりそうなものが見つからず、ひとまず後に置いとこう、というわけでその後は掲示板以外のウェブサイトのページを移転させる事に集中する。

ありがたく参考にさせていただいた
 Kent Web さんの Joyful Note

 (記事執筆時点ではv 7.21 PLUS)

 ↓ご迷惑がかからないようaタグでなく、javascriptのリンクにした
 

大変ありがとうございました。


はじめに

3度目の場所は、ここ

カテゴリ

SSL標準装備の無料メールフォーム作成・管理ツール|フォームメーラー

QooQ