引用:
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になるようなクラスを追加しちゃえばソートもかかるのですよ
クラスの拡張はある程度用意されてるぽいので
とりあえず、簡単にできそうかなと試したものの
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');
とかにします。
以上です。
ソートの順番は含まれている項目でご自由に。