記事No | : 5910 |
投稿日 | : 2009/06/03(Wed) 18:29:01 |
タイトル | : Topics Boardの最新記事をTOPに表示 |
ID情報 | : saipan |
投稿者 | : カメレオン |
URL | : http://www.countryhouse.co.jp/cgi-bin/topics/topics.cgi |
どなたかご教授いただけないでしょうか。
CGI利用させて頂いております。感謝しています。
さて、Topics Boardの最新記事をTOPに表示する事は可能でしょうか。
過去ログでjoyfl noteは可能であるように拝見しました。
どうぞご教授下さい。
宜しくお願いします。
記事No | : 6080 |
投稿日 | : 2009/06/27(Sat) 17:26:20 |
タイトル | : Re: Topics Boardの最新記事をTOPに表示 |
ID情報 | : teketen |
投稿者 | : てけてん |
もう見ていらっしゃらいかも知れませんが、同じ事をしたい方の為にも、書いておきます。
JavaScript又は、SSIによって、htmlファイルに最新の記事を表示する方法です。
以下は、TopicsBoard v1.2にて動作確認を行いました。
今後、バージョンアップされた場合でも、スクリプトの構成が大きく変わらなければ、利用できると思います。
改造は、自己責任にてお願いします。
何か問題があった際は、元に戻してください。
■topics.cgiをテキストエディタ又はメモ帳で開いて下さい。
#------------#
# 記事表示 #
#------------#
内の
$msg =~ s/!subject!/$sub/i;
$msg =~ s/!date!/$date/i;
$msg =~ s/!comment!/$com/i;
の次の行に
$msg =~ s/!no!/$no/ig;
を挿入して下さい。
#------------#
# 管理画面 #
#------------#
内の
# 削除
} elsif ($in{'job'} eq "dele" && $in{'no'}) {
の前の行に
newlog(\@file) if($newmax);
を、
# 修正フォーム
} elsif ($in{'job'} eq "edit" && $in{'no'}) {
と、
}
&header;
print <<"EOM";
<form action="$script">
<input type=submit value="掲示板に戻る"></form>
の前の行に、
newlog(\@new) if($newmax);
をぞれぞれ挿入して下さい。
最後の行に移動して下さい。
__END__
の前の行に、以下のサブルーチンを挿入して下さい。
# 追加 ■■
sub newlog {
my $list = $_[0];
$newmax = $pagelog if($newmax > $pagelog);
open(JS,"> $newfile.tmp") or error('最新ファイルに書き込めませんでした');
eval { flock(JS,2); };
print JS "var js = '';\n" if($js_on);
my $f = 0;
for(@$list) {
$f++;
last if($f > $newmax);
my @data = split(/<>/);
my $link = $link1;
my $skin = $design;
$skin =~ s/\n|\r//g;
my $com = $data[3];
if($maxcom) {
$data[3] =~ s/<[^>]*>//ig;
if(length($data[3]) > $maxcom*2) {
$com =~ s/\t/\s/ig;
$com =~ s/<br>/\t/ig;
$com =~ s/<[^>]*>//ig if($data[11]);
$com = substr($com,0,$maxcom*2);
chop $com unless($com =~ /^(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F\xA1-\xDF])*$/);
$com .= '...';
$com =~ s/\t/<br>/ig;
$link = $link2;
}
}
my $ino = 0;
for (my $h = 4; $h <= 10; $h += 3) {
$ino++;
my $img = '';
if($data[$h]) {
my $img_ = "$imgurl$data[0]-$ino$data[$h]";
$img = qq|<a href="$img_" target="$img_target"><img src="$img_" widht="$data[$h+1]" height="$data[$h+2]" border="0"></a>|;
}
$skin =~ s/!image-$ino!/$img/;
}
$skin =~ s/!date!/$data[1]/g;
$skin =~ s/!subject!/$data[2]/g;
$skin =~ s/!comment!/$com/g;
$skin =~ s|!link!|<a href="$script#$data[0]" target="$target">$link</a>|g;
$skin =~ s|href="?link"?|href="$script#$data[0]"|ig;
print JS $js_on ? "js += '$skin';\n" : "$skin\n";
}
print JS "document.write(js);\n" if($js_on);
close(JS);
rename("$newfile.tmp",$newfile);
chmod(0666,$newfile);
}
# ここまで
そして、設定部分に以下の設定を追加して下さい。
# 以下追加設定 ■■
# 最新記事をJavaScriptで表示する場合は1を、SSIで表示する場合は0を指定
$js_on = 1;
# 最新記事保存件数
# 1ページあたり表示件数以上にした場合は、強制的に1ページあたりの表示件数と同じ件数になります。
$newmax = 5;
# 最新記事ファイルへのパス
# SSIで最新記事を表示する場合も、拡張子は.jsで問題ありません。
$newfile = './newlog.js';
# 記事を何文字で省略するかを指定。全角換算。
# ここで指定した文字以上は省略され、省略した部分に...が表示されます。
# 記事を省略しない場合は、0を指定して下さい。
# 省略する時に、都合によりタグが削除されます(改行は反映されます)。
# ここで指定した文字数よりも少ない記事の場合は、タグは反映されます。
# また、どちらの場合もURLの自動リンクは行われません。
$maxcom = 50;
# 1つの記事のデザイン
# それぞれの箇所に、対応したものが表示されます。
#
# !date! : 年月日
# !subject! : 記事題名
# !comment! : 記事
# !image-1! : 画像1
# !image-2! : 画像2
# !image-3! : 画像3
# !link! : 該当記事へのリンク
# 該当記事へのリンク方法は、
#
# <a href="link">文字又は画像</a>
#
# と記述することも出来ます。「文字又は画像」は、好きなものを指定して下さい。
# また、<a href="link"の部分を変更しなければ、
# <a href="link" target="_blank">リンク</a>
# のように、他の属性も指定できます。
# また、例えば記事題名にリンクを張りたい場合は、
# <a href="link">!subject!</a>のように記述することも出来ます。
$design = <<"EOM"; # この行は、削除変更不可
<!-- ここから -->
<div class="newlog">
<div class="subject"><a href="link">!subject!</a></div>
<div class="date">!date!</div>
<div class="newimg">!image-1! !image-2! !image-3!</div>
<div class="comment">!comment!<br><br>!link!</div>
</div>
<!-- ここまで -->
EOM
# ↑この行は、EOMのみ記述されています。削除変更不可。
# 該当記事にリンクを張るリンク文字を指定して下さい。
# 画像に張る場合は、<img>タグで指定。
# この指定は、!link!で指定した部分に表示されます。
$link1 = '[記事に移動]';# 記事が省略されない場合
$link2 = '[続きを読む]';# 記事が省略された場合
# 該当記事を開くターゲットを指定
# この指定は、!link!に適応されます。
$target = '_blank';
# 画像を開くターゲットを指定
$img_target = '_blank';
# ここまで
以上で、topics.cgiの改造は終了です。
■テンプレート(スキンファイル)のtmp.htmlをテキストエディタ又は、メモ帳で開いて
<!-- line1 -->
の次の行に
<a name="!no!"></a>
を挿入して下さい。
■次に、新着記事を表示するhtmlファイルへの記述です。
最新記事を表示したい場所に、JavaScriptで表示したい場合は、
<script type="text/javascript" src="./topics/newlog.js"></script>
を、SSIで表示したい場合は
<!--#include file="./topics/newlog.js"-->
または、
<!--#include virtual="/フルパス/topics/newlog.js"-->
を記述して下さい。
newlog.js(最新記事ファイル)へのパスは、ご自分の環境に合わせて変更して下さい。
SSIの場合、ご利用のサーバーによっては、フルパス(サーバーパス)ではなく、相対パスで指定する必要があるかも知れません。
どちらか試してみて、駄目ならばもう一つの方法を試してください。
JavaScriptの場合は、http://から始まるパスか、相対パスで指定して下さい。
■最新記事は、TopicsBoardに新規投稿・記事の修正及び削除した時に、newlog.jsに書き込まれます。
ログファイルより、指定した件数分のログを取得し保存します。
最新記事のデザインの変更や、表示方法をJavaScriptからSSI(その逆も)に変更する場合は、設定を変更した後で、新規投稿や記事の修正作業を行って下さい。
以上です。
記事No | : 6169 |
投稿日 | : 2009/07/20(Mon) 20:55:53 |
タイトル | : Re^2: Topics Boardの最新記事をTOPに表示 |
ID情報 | : saipan |
投稿者 | : カメレオン |
てけてん様
長期で出張のため確認が遅れました。
ありがとうございます。
早速トライいたします。
重ねて御礼申し上げます。