Joomler!.net - Decided on Joomla!

デル株式会社

Wiki or Wordpress? No it is JContentPlus.

Home » Blog » Fireboardでまた少し変更してみました。
Dec
15
2007

Fireboardでまた少し変更してみました。

EMailPrintPDF
0 votes
Written by:Joomler! 3132 hits

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();
}

へ。

などと変更してみました。

書き忘れがあるかもしれない・・・。

抜けてるところや間違い、もっと良い方法など求む。

 

ADD A COMMENT

Subject*
:
Color Swatch




Email Link Page Code Text Align Center Text Align Justify Text Align Left Text Align Right Text Bold Text Quote Text Italic Text List Bullets Text List Numbers Text Strikethrough Text Underline World Link
Sun Unhappy Smile Evilgrin Wink Tongue Lightning Surprised Grin Rain Clouds Cloudy Snow Waii
Name*
:
EMail*
:
Website
:

JContentPlus for Joomla!1.5 powered by Joomler!.net

デル株式会社

Related Items

The Joomla!(R) name is used under a limited license from Open Source Matters in the United States and other countries.
joomler.net is not affiliated with or endorsed by Open Source Matters or the Joomla! Project.