Blogn(ぶろぐん)ではサイドバーに設置されている「最新コメント」一欄と「最新トラックバック」一欄のリンクをクリックすると、それぞれコメントとトラックバックの始めに飛べます。
ついたコメント・トラックバックが数件なら2〜3回スクロールすればお目当てのコメント・トラックバックにたどり着けますが、10件以上になるとスクロールする量も半端ではなくなります。
BlognPlus ではコメント・トラックバックそれぞれに個別 ID が振られており、一覧内からリンクをクリックすると、クリックしたコメント・トラックバックを直接読む事が出来ます。
ここでは Blogn でも BlognPlus と同等の動作になるようカスタマイズしてみました。
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} という新タグが使えるようになります。
これらをスキンに記述すると各コメント・トラックバックにアンカーが設定されます。