Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始
対象モジュール | なーお'nぶろぐ |
件名 | [xoops] フォーラムモジュ-ル「xcforum」製作開始 |
要旨 | d3forumの後継フォーラム・掲示板モジュール、「xcforum」を作り始めました。 自分にはかなーりハードルが高いのですが、 facebookのグループで色々相談しながらできそうなんで、もしかしたらできるかも。 facebook内の当該スレ それに、「factory」という、モジュール自動生成サイトがるのでこれを利用します。 で、今後の参考になるかもしれないので、できるだけメモを残しておきます。 ... |
投稿ツリー
-
Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (なーお, 2012/2/11 11:09)
- Re: Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (mizuki, 2012/2/16 13:39)
- Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (なーお, 2012/2/16 22:41)
- Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (mizuki, 2012/2/17 0:07)
- Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (なーお, 2012/2/18 0:41)
- Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (なーお, 2012/2/28 21:17)
- Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (なーお, 2012/3/7 12:04)
- Re: [xoops] フォーラムモジュ-ル「xcforum」製作開始 (なーお, 2012/3/11 13:19)
[xcforum開発] 徐々に進んでます。
壁にぶつかっていたのは、TopicsList表示で 複数テーブルをJOINして複数の検索条件を付加する部分。 JOINせずにロジックを回していたんだけど、長くなるし見通しも悪いコードになりそうな悪寒。。
複数テーブルをJOINすること自体、XoopsObject・criteriaではできない。 そこでfacebook上でヒントをいただき、d3forumの元のSQLで抽出し、 表示だけをfactoryが生成するobjetに放り込む方法を取ることで、解決。 ユーザーがチェック済みの投稿のアイコンを変える部分なども問題無くクリアできた。
ところで、d3forumはフォーラム内に独自の検索があって、このクエリ文字をfactoryで作られたPageNaviに反映する方法が今一つ判らない。今のままだと、実際のクエリ結果とPageNaviの表示がバラバラ。 テンプレート内にはsmartyプラグインが書かれていて、プラグインからpageNaviのオブジェクト内メソッドをあれこれ呼んで作っているので、まあその辺を解析して割り込めれば何とかなると思うんだけど・・
最終的には見た目もBoxNavi的にしたいし、これはd3forumで組み込んだクラスをやっぱり使うのがいいかな。
他方のソート機能はテンプレートにクエリ文字分を付加するだけでOKだったから、そちらは有り難く使わせていただきます!
以下、今回の実装に関連するソースコード部分。
ハンドラクラス
Legacy_AbstractClientObjectHandler を継承したクラス内に、最低限、以下の2つのメソッドを実装。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
|
オブジェクトクラス
Xcforum_TopicsObject 内に、オブジェクト内メンバ変数を後処理で初期化するメソッドを追加して、topicsテーブル内にJOINしたテーブルデータや他の諸々のデータも、Object内に格納できるようにする。 呼び元は上記getObject()中にあり。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
SQLとgetObjects
そして、肝心のObject取得部分は、以下の感じ。 現時点ではコントローラに書いちゃっているけど、もう少し粒度を細かくして、共通クラスに放り込んでブロックからも使えるようにできるといいかなあ。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
|