10.23 XOOPS Cubeサタデーラボでの発表
今週末、10月23日、Ryusさん主催のXOOPS Cubeサタデーラボ で、「d3diary開発とコメント統合プチカスタマイズ」と題して、私の発表の場があります。 お時間のある方はぜひどうぞ。(上記Ryusさんのページから要申し込み)
発表概要
発表内容(ほぼ原稿)は、以下になります。よろしくです。
なーおって、誰?
趣味
- 本来の趣味
- オーディオ
(スピーカー製作。プアオーディオ系。PCオーディオ。2009年5月にタモリ倶楽部に出演。こんな手の込んだこともたまに。) - ソフトテニス (高校・大学では2流。今や3流のシニアプレイヤー。)
- オーディオ
- 派生した趣味
- マラソン ベスト:3時間48分59秒(@ホノルル、22歳のとき)
- Linux、PC仮想化(VMware-ESXi)
- 2000年頃: ISDNで自宅サーバー。Holon Linux 2.0(並)、AMD K6-2-200MHz
- 2004年頃: ADSLで自宅サーバー。ACCA-8Mbps、RedhatLinux9、Pentium3-600MHz
- 2006年頃: 仮想化環境で自社サーバー。Flet's-ADSL-40Mbps、VineLinux4+VMware-server1.0+VineLinux4、Pentium4-2.8GHz
- 2008年頃: 仮想化環境で自社サーバー。Flet's-ADSL-40Mbps、Ubuntu-server8.10+VMware-server2.0+VineLinux4、Athron64 X2 4850e
- 2010年春: 仮想化環境で自社サーバー。Flet's-ADSL-40Mbps、VMware-ESXi4.1+CentOS5.5、Athron64 X2 4850e
- web、xoops、プログラミング
- なーおのとことん研究室: 1997年。三菱自動車 GDIエンジン搭載 レグナム購入、高速道路でエンスト(クレーム対応)、負圧計での燃焼モード解析から。
- ブログはじめ: 2005年冬。ココログ(nifty)。
- xoops使用はじめ: 2007年1月(積層スピーカーの会)
- なーお'nWEB (XCL)
- 2008年夏: ブログをココログからd3blogにMT形式データ取込み、HTMLページをpicoに取込み、移行。
- 2009年春: 旧サイトcgi掲示板の全過去ログデータをd3forumに取込み、移行。
- 運用中サイト
(有)モーションクリエイト(仕事)
motion cafe.(仕事)
モバイルテンプハウス(xoops)
集まれ!塩ビ管スピーカーコミュニティ(オーディオ)
Lafesta cafe.(車)
蘇我ミクス/さんぶクラブ別館(ソフトテニス)
みやこどりテニスクラブ(ソフトテニス)
注文住宅と不動産の裏話(友人)
- 本来の趣味
d3diary開発経過
minidiaryからのフォーク経緯
- matoyan氏作の日記モジュール、minidiary(2008年2月公開)
- 特徴
- mixiライクな見た目とユーザーインターフェース
- マルチユーザー。全員の日記の一覧/各人日記表示、各人カテゴリー
- 画像のアップロード・サムネイル自動生成
- ブロック無しでカレンダーや新着日記、コメントリストをサイドメニュー表示可能。(右側/左側選択可)
- XSNSモジュールと連携した閲覧権限。「友人まで公開」「友人の友人まで公開」
- 外部ブログ機能
- xoops2.0.16a-JPでも動作する
- ☆xoopsモジュールとしては未実装の標準機能がいくつかある → モジュールの勉強として入りやすい
- イベント通知
- 言語ファイル(japaneseのみ。 blockテンプレートには日本語直書き)
- コメント統合
- 特徴
- 2008年8月 minidiaryのハック(差分パック)を公開(なーお)
- d3コメント統合
- イベント通知(AltsysのD3notificationを利用)
- 「この人の日記へのコメントがあったら通知します」 機能って、あまり見かけなかった。
- 日記投稿者一覧ブロック
- d3pipes用のジョイント
d3diary公開とその後
- 2009年6月 d3diary-ver0.02 初版公開
- D3化
- 言語ファイル整備 (japanese, ja-utf8, english)
- 閲覧権限を、カテゴリ毎、日記投稿毎に設定可能
- 外部ブログ機能を、カテゴリに設定可能
- 2010年4月 d3diary-ver0.06
- HTML投稿の可能化
- 2010年5月 d3diary-ver0.08
- メンバー間共有カテゴリ
- 更新PING送信
- MT形式からのインポートスクリプト公開
- 2010年7月 d3diary-ver0.10 (開発版)
- メインページのCSSレイアウト化
- 投稿時の執筆日時指定
- 2010年10月 d3diary-ver0.12 (開発版)
- 共通関数群のobjectインスタンス化
- サイドメニューの個別ブロック化(従来のサイドブロックはデフォで使用可)
- 閲覧権限に、グループ指定、ユーザー指定を追加
- Xoops_breadcrumbsの実装
動作環境
- PHP4.3.x以上、PHP5.1、5.2
- MySQL-4.0.x以上(詳細は未調査)
- コア(実績あり、または検証済みのもの)
- xoops2.0.16a-JP
- JPEx
- ImpressCMS
- Xoops Cube Legacy 2.1、2.2
- 依存モジュール
- Altsys必須 (0.55以上)
- protector推奨 (HTMLpurifier)
- d3forum必須(コメント統合利用時、0.85以上)
CSSレイアウト
- テーマの設定色などを極力損なわず、できるだけ継承してそのまま表示する
- CMS Theme Finder の活用
- 日付表示に、BoxDateを採用
- テーマの設定色などを極力損なわず、できるだけ継承してそのまま表示する
カテゴリー
- 各人が自由に自分だけのカテゴリを作れる、マルチユーザーサイト向け
- 但し1記事1カテゴリ
- サブカテゴリは1階層のみ
- カテゴリ操作は面倒
- 共有カテゴリーも作成可能(管理者)、一括絞込み表示可。
- ユーザーによる複数記事選択のカテゴリ移動
- 各人が自由に自分だけのカテゴリを作れる、マルチユーザーサイト向け
外部ブログ
- 外部のブログの最新RSSフィードを自分の日記として表示できる。
- d3pipesのような切り抜き・コメント機能は無い
- カテゴリ1つにつき、1サイト設定可能。
- 同一ドメイン名のRSSを複数カテゴリに設定しても、動作しないので要注意。(MagpieRSSの仕様?)
- 外部のブログの最新RSSフィードを自分の日記として表示できる。
閲覧権限
- 閲覧権限を、カテゴリ毎・日記投稿毎に設定可能
- 友人機能モジュールとの連携 「友人まで」「友人の友人まで」
- グループ指定、ユーザー指定
- ユーザー指定は、xpwikiのsuggestion機能を組込み
その他
- HTML投稿可 (HTMLpurifier除外設定あり)
- コメント統合
- プラグインのcountは、リスト記事分の回数呼ばれるので使用せず、記事と一括してクエリ
- 記事閲覧権限に完全連動
- 実行速度を上げるため、ループ内で呼ばずに済むように、WHERE句の長いSQL文1本に
長いよん [viewcomment.php実行時の例] viewcomment.php実行時の例
赤字:「友人」・「友人の友人」抽出部分
青字:グループ指定・メンバー指定部分"SELECT p.post_id, p.subject, p.post_time, p.uid, p.guest_name, p.unique_path,
t.topic_external_link_id, u.uname, u.name, d.bid, d.cid,
c.cname, c.openarea as openareacat FROM xxx_forum_posts p
INNER JOIN xxx_forum_topics t ON (t.topic_id=p.topic_id AND ! t.topic_invisible )
INNER JOIN xxx_forum_forums f ON (f.forum_id=t.forum_id AND f.forum_id='10')
INNER JOIN xxx_diary3_diary d ON t.topic_external_link_id=d.bid AND d.uid=4
LEFT JOIN xxx_diary3_category c ON (d.uid=c.uid OR c.uid=0) AND d.cid=c.cid
LEFT JOIN xxx_users u ON p.uid=u.uid
LEFT JOIN xxx_diary3_config cfg ON d.uid=cfg.uid
WHERE ! t.topic_invisible AND (d.uid='2' OR (d.openarea <>100 AND ( ( ( ( (d.openarea IN (0,1) )
AND (cfg.openarea IN (0,1) OR cfg.openarea IS NULL) AND (c.openarea IN (0,1) OR c.openarea IS NULL) )
OR ( ( (d.openarea='2' AND (c.openarea<='3' OR c.openarea IS NULL) AND (cfg.openarea<='3' OR cfg.openarea IS NULL) )
OR (c.openarea='2' AND d.openarea<='3' AND (cfg.openarea<='3' OR cfg.openarea IS NULL) )
OR (cfg.openarea='2' AND d.openarea<='3' AND (c.openarea<='3' OR c.openarea IS NULL) ) ) AND d.uid IN (1) )
OR ( ( (d.openarea='3' AND (c.openarea<='3' OR c.openarea IS NULL) AND (cfg.openarea<='3' OR cfg.openarea IS NULL) )
OR (c.openarea='3' AND d.openarea<='3' AND (cfg.openarea<='3' OR cfg.openarea IS NULL) )
OR (cfg.openarea='3' AND d.openarea<='3' AND (c.openarea<='3' OR c.openarea IS NULL) ) ) AND d.uid IN (1,2,3) ) )
OR ( (d.openarea='10' OR d.openarea='20') AND (d.vgids LIKE '%|2|%' OR d.vgids LIKE '%|4|%') )
OR ( (c.openarea='10' OR c.openarea='20') AND (c.vgids LIKE '%|2|%' OR c.vgids LIKE '%|4|%') ) )
OR (d.openarea='20' AND d.vpids LIKE '%|2|%')
OR (c.openarea='20' AND c.vpids LIKE '%|2|%') ) ) )
ORDER BY p.post_time DESC LIMIT 0,50"
- イベント通知
- 「この人の日記へのコメントがあったら通知します」 は、自身へのコメントのみ通知することにも使える
- インポート
- minidiary, d3diaryから
- Movable Type形式テキストファイルから (別途:MT形式からのインポートスクリプト)
- イベント通知
今後の進路?
- 一般機能の追加
- 画像管理: 各人がアップロードした画像を管理
- 管理者は、リンク切れ画像を一括整理
- 画像管理: 各人がアップロードした画像を管理
- ブログモジュール代替として
- 友人連携機能などは残し、ブログモジュールとしても使えるように
- トラックバック 送信/受信
- 友人連携機能などは残し、ブログモジュールとしても使えるように
- 企業ユース向けとして
- 画像以外のファイルアップロード・添付
- 直打ちされても記事閲覧権限に連動させる
- 画像以外のファイルアップロード・添付
- 見切る機能
- マルチカテゴリは煩雑なので実装しない。 タグを上手に使って。
d3コメント統合の、元記事閲覧権限連動ハック
- コメント元のモジュールでユーザー毎やグループ毎の閲覧権限を制御する機能を使うとき、コメントのタイトルやコメント者がd3forum側で表示されてしまうため、ちょっと気持ちが悪いと思ったことがきっかけ。 本来は、これらも隠しておくべきものと考えて作りました。
- このハックには、ゲスト名がアサインされていなかったページへのゲスト名表示も可能になっています。
- 私は多くのサイトですぐに使えるように、このハックを常に利用していますが、それとは別にwyeさんが作って下さった、d3コメント統合の、元記事閲覧権限連動ハック Plugin版 もあります。
d3forum側で統合コメントのツリー全表示
- コメント統合で付いたコメント。 質問内容が変わったりしてトピック分けしたりすると、d3forum側で「このトピックの投稿一覧へ」で閲覧してもトピック内の投稿しか表示されないため、同じ元記事に紐付いた他のトピックの投稿に気づかない。 これを何とかしたかった。
- その対策として、「このトピックの投稿一覧へ」を表示したときに、他のトピも含めてツリーを表示することにしました。
- smartyプラグイン「function.d3comment_tree.php」と、テンプレート編集で装備可能。
(未実施)今後何とかしたいこと
- Topics内投稿一覧のページ分割。 件数が50件くらいになると、重くて仕方がない。
- 作者のGIJOEさんが作成中だった名残がコードにあるけど、「子投稿1.1」あたりの処理との絡みが出そうで、少し面倒な予感。
- モジュールCSSが、テーマ色・文字プロパティを反映しない件
- XCLテンプレート標準でどなたかが対応いただけることを期待。
- 今後のd3forumのメンテ・バージョンアップは誰が?
- Topics内投稿一覧のページ分割。 件数が50件くらいになると、重くて仕方がない。
謝辞
- minidairyの作者、matoyan氏には、minidiaryフォーク版公開に快諾いただきありがとうござます。
- GIJOE氏、nao-pon氏、hodaka氏、kilica氏、ほかソースを参考にさせていただきました。ありがとうございます。
ぺージ情報 | |
---|---|
ぺージ名 : | d3diary開発日記/2010-10-21 |
ページ別名 : | 未設定 |
ページ作成 : | なーお |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | なし |
ユーザー : | なし |