LOGIN ID Password Auto Login Register Now! Lost Password?
Xoops Q&A

d3blogでエントリー表示順をカテゴリの表示順で表示させたい

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011/8/10 15:57
syutuji  1st Class   投稿数: 46
d3blogでエントリー表示順を「掲載日の降順」「カテゴリID昇順」で
表示するように改修したのですが、そこに追加で「カテゴリ表示順」を反映させて表示するように試みています。

/xoops_trust_path/modules/d3blog/main/index.phpの45行目付近に
$criteria->setSort('cid,published');
を入れているのですがここからカテゴリの表示順をどのように
加えたらいいのか手詰まっています。

どなたかお知恵をお貸しいただけないでしょうか。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/8/10 22:23 | 最終変更
domifara  Ensign   投稿数: 298
引用:

syutujiさんは書きました:
d3blogでエントリー表示順を「掲載日の降順」「カテゴリID昇順」で
表示するように改修したのですが、そこに追加で「カテゴリ表示順」を反映させて表示するように試みています。

/xoops_trust_path/modules/d3blog/main/index.phpの45行目付近に
$criteria->setSort('cid,published');
を入れているのですがここからカテゴリの表示順をどのように
加えたらいいのか手詰まっています。

どなたかお知恵をお貸しいただけないでしょうか。
テーブルをジョイントしなくちゃいけないので
クラスを拡張する必要があると思います。
ところで、
お使いのd3blogのバージョンは?1.08 ですか?
言語はja_utf8ですか?(ソースのメモutf-8の日本語書いちゃいました)
XCLのバージョンはとくに関係ないか?
PHP5.2+ですか
動きがMySQLのバージョンによっては違ってくるかも

基本的に見るだけところなので
SELECT a.*,b.pid,b.name,b.weight,b.imgurl FROM e3a72c_d3blog_entry a,e3a72c_d3blog_category b WHERE a.cid=b.cid ORDER BY weight,cid,published ASC LIMIT 10
こんなSQLになるようなクラスを追加しちゃえばソートもかかるのですよ
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/8/10 23:58 | 最終変更
domifara  Ensign   投稿数: 298
クラスの拡張はある程度用意されてるぽいので
とりあえず、簡単にできそうかなと試したものの
d3バージョンやMySQL環境が違うと動く保障はできません。
(理由は以下に説明)

xoops_mod_d3blog108_custum.zip 

簡単にクラスのオーバーライドしようと思ったら
複製機能用のevalところがオーバーライド側を認識する前に
元のクラスのeval優先になるので、これがひっかかって、
意図した動作しないので、オーバーライド方式はだめで、
少しがっかり。


仕方がないので、元のクラスを丸々コピーぺしてソースがべたべたのコピーペーストで作ったので
バージョン変わると動かないだろうと思うので気に入らないのですが
差分だけ追加したクラスを作りました。
だからd3blogのバージョンが違うと正常に動かない可能性大。

xoops_trust_path/d3blog/class/entryext.class.php
まず、これを追加します。
これは、entryテーブルに、categoryテーブルをcidでジョイントして
categoryテーブルの
pid,name,weight,imgurlの項目を追加したものです。
(更新系のところでなければ使えるはず)
------------------
次に /main/index.phpの改造です。
(改造版を同梱してますが元に戻す前に忘れるので説明)

まず
line 14行目の
$entry_handler =& $myModule->getHandler('entry');
$entry_handler =& $myModule->getHandler('entryext');
と拡張版のクラスを呼び出す様にします。
これで、weightとかでもソート出来る準備が出来ました。

後は、ソートの設定
追加してlie ずれたのでだいたいですが
Line 44 くらいの
$criteria->setSort('published');
$criteria->setOrder('DESC');

//HACK by domifara
//$criteria->setSort('published');
//$criteria->setOrder('DESC');
$criteria->setSort('weight,cid,published');
$criteria->setOrder('ASC,ASC,DESC');

とかにします。
以上です。
ソートの順番は含まれている項目でご自由に。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/8/11 9:40
syutuji  1st Class   投稿数: 46
domifara様。ご回答ありがとうございます。

質問させていただいた環境は以下のようになっております。

・XOOPS Cube Legacy 2.1.5
・PHP Version 5.2.9-2
・d3blog 1.05
・言語 euc_jp
・MySQLのバージョン不明

domifaraさんが作っていただいたクラスを使用して今のところ問題無く動作しているようです。

わざわざファイルを作っていただきありがとうございました。

またご相談させていただくことがあるかもしれませんがよろしくお願いいたします。
投票数:0 平均点:0.00
  条件検索へ

Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities