KENT-WEB サポートコーナー 過去ログ [ 0386 ]


記事No: 5910
投稿日: 2009/06/03(Wed) 18:29:01
タイトルTopics Boardの最新記事をTOPに表示
ID情報: saipan
投稿者: カメレオン
URLhttp://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
投稿者: カメレオン

てけてん様

長期で出張のため確認が遅れました。
ありがとうございます。
早速トライいたします。
重ねて御礼申し上げます。


[検索ページ]