Joomler!.net - Decided on Joomla!

Wiki or Wordpress? No it is JContentPlus.

 

Archives

Blog

Demo

Home » Blog » setQuery
0 votes
Written by:Joomler! 16128 hits Friday, 14 November 2008 17:32

言われてみればその通り、関連記事モジュールには表示件数の制限が無いためたくさんヒットしたらそのまま表示されてしまいます。考えてみればこのサイトではそれだと見た目も悪くなるし、少し内容も表示したかったのでオリジナルの関連記事モジュールを作成したことを忘れていました。

とりあえず、表示件数の制限をつけることくらいは簡単なのでHackか、テンプレートでやっちゃえば簡単です。

まずは、Hackなら

$db->setQuery($query);

$db->setQuery($query, 0, 20);

のように、最初(0)から20個の記事というように20の部分に表示最大件数を入れます。自由に設定できるようにしたい場合は、

$db->setQuery($query, 0, intval($params->get('limit', 20)));

のようにし、xmlファイルのパラメータ部に

<param name="limit" type="text" size="3" label="最大件数" description="" />

などと追加すればバックエンドで最大件数が設定できるようになります。

ではテンプレート側でやるには

mod_related_items/tmpl/default.phpとindex.htmlを、使っているテンプレートフォルダ/html/mod_related_itemsにコピーします。そしてコピーしたdefault.phpを編集します。

<?php foreach ($list as $item) :	?>

<?php
$i = 0; 
foreach ($list as $item) :
 	if($i > 20){
 		break;
 	}
 	$i++;
 ?>

のようにすればOKです。

本体をHackする方法だとアップデート時に、忘れていたりしてかなり面倒になってきたりしますので、それを考慮にいれるとテンプレート側で対応する方法を行った方が良いかもしれません。

 
1 votes
Written by:Joomler! 10575 hits Wednesday, 27 February 2008 21:24

今日、データベースをphpMyAdminでエクスポートし、ローカルにインポートするために中を見ていたらやけに単調なログのようなデータが何行もあるではないですか。見たらdocmanとdssyndicateのものでした。

必要ないのでさっと削除しました。おまけにサーバー上のものも削除。削除してからダウンロードしたものと比べたらなんとサイズが5分の1になりました。

ログの設定ってあったかな・・・。docmanにはあるようだが、dssyndicateには見あたらない・・・。

$query = "SELECT COUNT(id) FROM #__dssyndicate_stats";
$database->setQuery( $query );
$count  = $database->loadResult();
if($count > 100){
    $query = "TRUNCATE TABLE #__dssyndicate_stats";
    $database->setQuery( $query );
    $database->query();
}

これをadd_statsのところに書き足し、100件以上になると削除するように変更した。

それにしてもログがサイトの内容の4倍あったとは・・・・ログだけでサイトが後4つできることになる・・・。

とほほほ。

 
0 votes
Written by:Joomler! 21880 hits Saturday, 15 December 2007 17:01

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以上の場合)

へ。
注:この変更は、MySQLのバージョン(古い)では、動きません。 対応しないバージョンの方(うちのサーバーもそうです。MySQL4.0.27かな)は、下記にすること。

異なる部分のみしか書いていませんでしたので訂正しました。


ここからは、どのバージョンでも必要です。

さらに同じく176行目付近

$link = sefRelToAbs("index.php?option=com_fireboard&func=view&id=$row->fbid" . "&catid=$row->catid#$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


へ。さらに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>


へ。

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


へ。

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

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

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

 

JContentPlus for Joomla!1.5 powered by Joomler!.net

デル株式会社
joomler.net is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
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.