最新コメント・トラックバックのリンク先変更

Blogn(ぶろぐん)ではサイドバーに設置されている「最新コメント」一欄と「最新トラックバック」一欄のリンクをクリックすると、それぞれコメントとトラックバックの始めに飛べます。
ついたコメント・トラックバックが数件なら2〜3回スクロールすればお目当てのコメント・トラックバックにたどり着けますが、10件以上になるとスクロールする量も半端ではなくなります。

BlognPlus ではコメント・トラックバックそれぞれに個別 ID が振られており、一覧内からリンクをクリックすると、クリックしたコメント・トラックバックを直接読む事が出来ます。

ここでは Blogn でも BlognPlus と同等の動作になるようカスタマイズしてみました。

Blogn(ぶろぐん)v1.9.3 の改造方法

各コメントにアンカーを設定

BlognPlus には各コメントに個別の ID がふられていますが、Blogn にはそれがありません。
仕方がないので投稿日付と投稿時間からユニークな ID を生成することにします。

index.php の1150行あたり

}else{
    $commenturl = "<a href=\"".$c_url."\" target=\"_blank\" rel=\"nofollow\">";
    $commenturle = "</a>";
    $buf2 = str_replace ("{COMMENTURL}", $commenturl, $buf2);
    $buf2 = str_replace ("{/COMMENTURL}",  $commenturle, $buf2);
}
// コメントID
$cmtid = substr($c_date, -4).$c_time;
$buf2 = str_replace ("{CMTID}", "<a name=\"cmt".$cmtid."\"></a>", $buf2);
$buf2 = str_replace ("{COMMENTUSER}", $c_name, $buf2);
if (strstr($buf2,"{COMMENTYMD}") && strstr($buf2,"{/COMMENTYMD}")) {

コメントがない場合の処置

index.php の1170行あたり

}else{
    $buf2 = str_replace ("{COMMENTBODY}", "コメントはありません。", $tmpbuf);
    $buf2 = str_replace ("{COMMENTURL}", "", $buf2);
    $buf2 = str_replace ("{/COMMENTURL}", "", $buf2);
    $buf2 = str_replace ("{COMMENTEMAIL}", "", $buf2);
    $buf2 = str_replace ("{/COMMENTEMAIL}", "", $buf2);
    $buf2 = str_replace ("{COMMENTUSER}", "", $buf2);
    $buf2 = preg_replace ("/\{COMMENTYMD\}[\w\W]+?\{\/COMMENTYMD\}/", "", $buf2);
    $buf2 = preg_replace ("/\{COMMENTHMS\}[\w\W]+?\{\/COMMENTHMS\}/", "", $buf2);
    $buf2 = str_replace ("{COMMENTID}", "", $buf2);
    $buf2 = str_replace ("{CMTID}", "", $buf2);
    $skin3 = $buf2;
}

最新コメント欄のリンク

index.php の620行あたり

if ($oldtitle != $d_title) {
    $oldtitle = $d_title;
    $skin3 .= preg_replace("/\{RCTITLE\}/", $d_title, $buf1);
}
$tmpbuf = preg_replace("/\{RCNAME\}/", $c_name, $buf2);
$RClink = "<a href=\"".PHP_SELF."?eid=".$c_eid."#comments\">";
$RClinke = "</a>";

↑ を ↓ のように書き換える(変更箇所は赤色で表示)

if ($oldtitle != $d_title) {
    $oldtitle = $d_title;
    $skin3 .= preg_replace("/\{RCTITLE\}/", $d_title, $buf1);
}
$tmpbuf = preg_replace("/\{RCNAME\}/", $c_name, $buf2);
// コメントID
$cmtid = substr($c_date, -4).$c_time;
$RClink = "<a href=\"".PHP_SELF."?eid=".$c_eid."#cmt".$cmtid."\">";
$RClinke = "</a>";

各トラックバックにアンカーを設定

BlognPlus には各トラックバックに個別の ID がふられていますが、Blogn にはそれがありません。
仕方がないので投稿日付と投稿時間からユニークな ID を生成することにします。

index.php の1220行あたり

if (strstr($buf2,"{TRACKBACKHMS}") && strstr($buf2,"{/TRACKBACKHMS}")) {
    list($dat1,$dd,$dat2) = word_sepa("{TRACKBACKHMS}", "{/TRACKBACKHMS}", $buf2);
    $buf2 = $dat1.date($dd,mktime(substr($t_time,0,2),substr($t_time,2,2),substr($t_time,4,2),
substr($t_date,4,2), substr($t_date,6,2), substr($t_date,0,4))).$dat2;
}
// トラックバックID
$trkid = substr($t_date, -4).$t_time;
$buf2 = str_replace ("{TRKID}", "<a name=\"trk".$trkid."\"></a>", $buf2);
$skin3 = $skin3.$buf2;

トラックバックがない場合の処置

index.php の1230行あたり

}else{
    $buf2 = str_replace ("{TRACKBACKTITLE}", "", $tmpbuf);
    $buf2 = str_replace ("{TRACKBACKBODY}", "トラックバックはありません。", $buf2);
    $buf2 = str_replace ("{TRACKBACKUSER}", "", $buf2);
    $buf2 = str_replace ("{TRKID}", "", $buf2);

    $buf2 = preg_replace ("/\{TRACKBACKYMD\}[\w\W]+?\{\/TRACKBACKYMD\}/", "", $buf2);
    $buf2 = preg_replace ("/\{TRACKBACKHMS\}[\w\W]+?\{\/TRACKBACKHMS\}/", "", $buf2);
    $skin3 = $buf2;
}

最新トラックバック欄のリンク

index.php の700行あたり

if ($oldtitle != $d_title) {
    $oldtitle = $d_title;
    $skin3 .= preg_replace("/\{RTTITLE\}/", $d_title, $buf1);
}
$RTlink = "<a href=\"".PHP_SELF."?eid=".$t_eid."#trackback\">";
$RTlinke = "</a>";

↑ を ↓ のように書き換える(変更箇所は赤色で表示)

if ($oldtitle != $d_title) {
    $oldtitle = $d_title;
    $skin3 .= preg_replace("/\{RTTITLE\}/", $d_title, $buf1);
}
// トラックバックID
$trkid = substr($t_date, -4).$t_time;
$RTlink = "<a href=\"".PHP_SELF."?eid=".$t_eid."#trk".$trkid."\">";
$RTlinke = "</a>";

スキンの変更

上記の改造をほどこす事で、新たに {CMTID} と {TRKID} という新タグが使えるようになります。
これらをスキンに記述すると各コメント・トラックバックにアンカーが設定されます。


サイト作成のヒント集に戻る