Fireboardで変更したところ
- 最近の投稿に表示される記事自体が、Latest Single Subject(単独題名を表示)を有効にしていると同じ題名内ではソートされないのでおかしいです。
- 最近の投稿のリンクや、最新の投稿のリンクをクリックしてもページをまたぐ場合はその記事に直接飛ばない。
- 最近の投稿のリンクをクリックしても返信の場合、ヒット数がカウントされない。
ということで変更してみました。
ROOT/components/com_fireboard/template/default/plugin/recentposts/recentposts.php
93~107行目付近
$query = " SELECT u.id, ifnull(u.username, 'Guest') as username, ifnull(u.name,'Guest') as name," . " fb.subject, fb.id as fbid, fb.catid, from_unixtime(fb.time) as date, " . " fb.hits, fb.locked,fb.topic_emoticon, fb.parent, sc.name as catname " . " FROM #__fb_messages AS fb " . " LEFT JOIN #__users AS u ON u.id = fb.userid" . " INNER JOIN #__fb_categories sc on sc.id = fb.catid " . " WHERE " . ($category == '' ? "1=1 " : "(fb.catid IN ($category) or sc.parent IN ($category))") . " AND (sc.pub_access<=$group_id) " . ($replysubject ? "" : " AND fb.parent=0 ") . " AND (sc.published=1)" . ($singlesubject ? " GROUP BY fb.subject" : "") . " ORDER BY fb.time DESC" . " LIMIT $count";
を(MySQLのバージョンがたぶん5以上の場合)
if($singlesubject){
$query ="SELECT u.id, ifnull(u.username, 'Guest') as username, ifnull(u.name,'Guest') as name, fb.subject, fb.id as fbid, fb.catid, from_unixtime(fb.time) as date, fb.time, fb.thread, fb.hits, fb.locked,fb.topic_emoticon, fb.parent, sc.name as catname"
. "\n FROM (SELECT * FROM #_fb_messages ORDER BY time DESC ) AS fb"
. "\n LEFT JOIN #_users AS u ON u.id = fb.userid"
. "\n INNER JOIN #_fb_categories sc on sc.id = fb.catid"
. "\n WHERE ". ($category == '' ? "1=1 " : "(fb.catid IN ($category) or sc.parent IN ($category))"). " AND (sc.pub_access<=0) AND (sc.published=1)". ($replysubject ? "" : " AND fb.parent=0 ")
. "\n GROUP BY fb.subject"
. "\n ORDER BY fb.time DESC LIMIT $count"
;
} else {
$query
= " SELECT u.id, ifnull(u.username, 'Guest') as username, ifnull(u.name,'Guest') as name,"
. " fb.subject, fb.id as fbid, fb.catid, from_unixtime(fb.time) as date, fb.time, fb.thread, "
. " fb.hits, fb.locked,fb.topic_emoticon, fb.parent, sc.name as catname "
. " FROM #__fb_messages AS fb "
. " LEFT JOIN #__users AS u ON u.id = fb.userid"
. " INNER JOIN #__fb_categories sc on sc.id = fb.catid "
. " WHERE "
. ($category == '' ? "1=1 " : "(fb.catid IN ($category) or sc.parent IN ($category))")
. " AND (sc.pub_access<=$group_id) "
. ($replysubject ? "" : " AND fb.parent=0 ")
. " AND (sc.published=1)"
. " ORDER BY fb.time DESC"
. " LIMIT $count";
}
へ。
注:この変更は、MySQLのバージョン(古い)では、動きません。 対応しないバージョンの方(うちのサーバーもそうです。MySQL4.0.27かな)は、下記にすること。
異なる部分のみしか書いていませんでしたので訂正しました。
if($singlesubject){
$query = "SELECT MAX(fb.id) AS id FROM #__fb_messages AS fb"
. "\n INNER JOIN #__fb_categories AS sc ON sc.id = fb.catid"
. "\n WHERE ". ($category == '' ? "1=1 " : "(fb.catid IN ($category) or sc.parent IN ($category))")
. "\n AND (sc.pub_access<=$group_id) ". ($replysubject ? "" : " AND fb.parent=0 "). " AND (sc.published=1)"
. "\n GROUP BY fb.subject"
. "\n LIMIT $count";
$database->setQuery($query);
$J_ids = $database->loadResultArray();
$J_IDquery = '';
if(!empty($J_ids)){
$J_IDquery = "\n WHERE fb.id IN(". implode(',', $J_ids). ")";
}
$query ="SELECT u.id, ifnull(u.username, 'Guest') as username, ifnull(u.name,'Guest') as name, fb.subject, fb.id as fbid, fb.catid, from_unixtime(fb.time) as date, fb.time, fb.thread, fb.hits, fb.locked,fb.topic_emoticon, fb.parent, sc.name as catname"
. "\n FROM #__fb_messages AS fb"
. "\n LEFT JOIN jos_users AS u ON u.id = fb.userid"
. "\n INNER JOIN jos_fb_categories sc on sc.id = fb.catid"
. $J_IDquery
. "\n ORDER BY fb.time DESC"
;
} else {
$query
= " SELECT u.id, ifnull(u.username, 'Guest') as username, ifnull(u.name,'Guest') as name,"
. " fb.subject, fb.id as fbid, fb.catid, from_unixtime(fb.time) as date, fb.time, fb.thread, "
. " fb.hits, fb.locked,fb.topic_emoticon, fb.parent, sc.name as catname "
. " FROM #__fb_messages AS fb "
. " LEFT JOIN #__users AS u ON u.id = fb.userid"
. " INNER JOIN #__fb_categories sc on sc.id = fb.catid "
. " WHERE "
. ($category == '' ? "1=1 " : "(fb.catid IN ($category) or sc.parent IN ($category))")
. " AND (sc.pub_access<=$group_id) "
. ($replysubject ? "" : " AND fb.parent=0 ")
. " AND (sc.published=1)"
. " ORDER BY fb.time DESC"
. " LIMIT $count";
}
ここからは、どのバージョンでも必要です。
さらに同じく176行目付近
$link = sefRelToAbs("index.php?option=com_fireboard&func=view&id=$row->fbid" . "&catid=$row->catid#$row->fbid");
を
$J_limitquery = '';
$database->setQuery( "SELECT COUNT(id) FROM #__fb_messages WHERE thread = $row->thread AND time < ($row->time+1)" );
$J_count = $database->loadResult();
$J_limit = (int)$fbConfig['messages_per_page'];
if($J_limit < $J_count){
$J_limitstart = (int)((int)($J_count / $J_limit ) * $J_limit );
if($J_limitstart == $J_count){
$J_limitstart = $J_limitstart - $J_limit;
}
$J_limitquery = "&limit=$J_limit&limitstart=$J_limitstart";
}
$link = sefRelToAbs("index.brush:php;?option=com_fireboard&func=view&id=$row->fbid" . "&catid=$row->catid$J_limitquery"). "#$row->fbid";
へ。
そしてさらに
ROOT/components/com_fireboard/template/default/listcat.php
177行目
$database->setQuery("SELECT c.*,m.subject, mm.catid as lastcat, m.name as mname, m.userid, u.username, u.name as uname FROM #__fb_categories as c
を
$database->setQuery("SELECT c.*,m.subject, m.thread as thread, mm.catid as lastcat, m.name as mname, m.userid, u.username, u.name as uname FROM #__fb_categories as c
へ。さらに548行目~付近
if ($numtopics != 0) { ?> <td class = "td-5" align="left"> <div class = "<?php echo $boardclass ?>latest-subject fbm"> <a href = "<?php echo sefRelToAbs(JB_LIVEURLREL.'&func=view&catid='.$singlerow->lastcat.'&id='.$latestid).'#'.$latestid;?>"><?php echo $latestsubject; ?></a> </div>
を
if ($numtopics != 0)
{
$J_limitquery = '';
$database->setQuery( "SELECT COUNT(id) FROM #__fb_messages WHERE thread = $singlerow->thread" );
$J_count = $database->loadResult();
$J_limit = (int)$fbConfig['messages_per_page'];
if($J_limit < $J_count){
$J_limitstart = (int)((int)($J_count / $J_limit ) * $J_limit );
if($J_limitstart == $J_count){
$J_limitstart = $J_limitstart - $J_limit;
}
$J_limitquery = "&limit=$J_limit&limitstart=$J_limitstart";
}
?>
<td class = "td-5" align="left">
<div class = "<?brush:php; echo $boardclass ?>latest-subject fbm">
<a href = "<?brush:php; echo sefRelToAbs(JB_LIVEURLREL.'&func=view&catid='.$singlerow->lastcat.'&id='.$latestid. $J_limitquery).'#'.$latestid;?>"><?brush:php; echo $latestsubject; ?></a>
</div>
へ。
最後に
ROOT/components/com_fireboard/template/default/view.php
123行目付近
if ($this_message->userid != $my->id) { $database->setQuery("UPDATE #__fb_messages SET hits=hits+1 WHERE id=$thread AND parent=0"); $database->query(); }
を
if ($this_message->userid != $my->id) {
$database->setQuery("UPDATE #__fb_messages SET hits=hits+1 WHERE id=$this_message->id AND thread=$thread");
$database->query();
}
へ。
などと変更してみました。
書き忘れがあるかもしれない・・・。
抜けてるところや間違い、もっと良い方法など求む。









