トップ  >  趣味の部屋  >  XOOPSサイト構築  >  d3コメント統合の、元記事閲覧権限連動ハック
xoops コメント統合 d3forum

本情報はいささか古く、現在ではハック無しで組み込まれた、こちらのd3forum_rをどうぞご使用ください。

本体ハックをしたくない方は、plugin版もありますので、そちらをご検討ください。

d3コメント統合の、元記事閲覧権限連動その他ハック anchor.png

  • 2011-5-15 sourceforge.jpにd3forumメンテプロジェクトを立ち上げて、本ハックをマージしたバージョンを配布開始しました。こんごはそちらが最新になります。お間違えなく。
  • 2010-11-01 他の機能を取り込んでバージョンアップしました。
    現在のハックバージョン:0.85_003a4
    (過去のバージョンはこちら→ 0.85_001

実装済みのサイト(参考まで) : d3diaryデモサイト

元ネタ:(XUGJ)d3forum-d3diary統合元モジュール閲覧権限フィルター 
(本ハックでは実装方法を少し変えています。)

d3forumのコメント統合の、元記事閲覧権限を制御する機能を使うとき、コメントのタイトルやコメント者がd3forum側で表示されてしまう気持ちが悪さを回避するためのハックをメインとし、本名表示対応やゲスト名表示、ツリー表示、テーマ色の反映などの周辺ハックを取り込んだ物です。

なお、d3forumの更に先の関連モジュールとの連携は、d3pipes(とattachfile:2010-11-2追加)を除いて手を入れていません。 (例えば、新着情報、piCalなど。。) 元記事に閲覧権限が無いコメントでも、それらには発信される可能性がありますので、ご承知おきださい。 今後手をつけるかもしれませんが、切りが無いので期待薄と思ってください。

ダウンロード anchor.png

以下のファイルをダウンロード、解凍し、trust以下のフォルダを xoops_trust_path/ 以下に上書き、html側のsmartyプラグインをsmarty/pluginsフォルダにアップロードして、モジュールアップデートを実行してください。

ダウンロードファイル適応d3forum本体バージョン
filed3com_auth_diff_0.85_003a5.zip 第三版-a4 最新
いくつかのバグFIXなどの最終版
0.85
filed3com_auth_diff_0.85_003a.zip; 第三版-a、
「0.85_003」でのcomment_functions.phpの不具合修正。
コメント統合のクラス取得処理を改善。
(注意)smartyPlugin 「function.d3comment.php」も変更しています。
0.85
filed3com_auth_diff_0.85_002.zip 第二版0.85

機能・内容 anchor.png

コメント元記事の閲覧権限の継承 anchor.png

メインとなる機能です。 D3コメント統合を行った各モジュールの、D3commentクラス内の、「Validate_id」メソッドへの問い合わせを行って、その結果で判定します。 対象となるページは、

  1. listtopics ページ、 listtopics_over_categories ページ
  2. listtopicsブロック、listpostsブロック
  3. forum検索 ページ
  4. Global 検索 ページ → 結果的に 各ユーザーの投稿ログページにも反映される。

となっています。
各モジュールへの問い合わせた結果は、そのモジュールのD3commentクラスの「validate_id」実装内容次第です。

 但し、listtopics ページと listtopics_over_categories ページ については、管理者とアドミニストレータに対しては、問い合わせ結果に関わらず全て表示します。 理由は、どこか表示しておかないと、元記事が削除されたりしてモジュール間の記事リンクが切れた場合に、迷子になった記事のメンテナンスが出来なくなってしまうからです。  今回のハックによる副作用として、このような迷子記事は 一般ユーザーやゲストからは一切見えなくなりますので、そのメリット・デメリットを考慮のうえご使用ください。

d3pipes ブロックジョイントの閲覧権限の継承 anchor.png

同梱したd3pipesブロックジョイント「D3pipesBlockD3forumrev」も同様に権限継承がなわれます。 (Topics/Posts をパラメータで選択) 
このTopicsジョイントでは、d3forumオリジナルのジョイントではアサインされない、トピック内の最新コメント本文もアサインします。 今回追加したPostsジョイントも同様です。

pipes_edit.gif

なお、タイトル部分に[掲示板名]を付加しております。

external_link_idのアサイン anchor.png

各ハックでは、テンプレートに external_link_id をアサインしています。
使い方としては、 各ページでの飛び先をコメント元記事に変更したりすることを想定しています。

 参考:コメント統合でブロックから元記事へリンク

block_list_posts.html、block_list_topics.html テンプレートの中にサンプルでコメントアウトしていますので、必要に応じて内容を調整し有効化してください。

ゲスト名のアサイン anchor.png

オリジナルのソースでは、ゲスト名がアサインされていなかったのを、topicslist、topics_over_categoriesでは「first_post_gname」「last_post_gname」でアサインしています。
元ネタ:(XUGJ)d3forumのlisttopicsのゲスト名

本名表示 anchor.png

管理画面に、「uname」(ユーザーID)/「name」(本名:ニックネーム) の表示選択を付けて、全ての表示を切り替えるようにハックしました。 なお、notification機能の送信先ユーザー名(X_UNAME)についてはコア側なので変更していません。 コアがXCLでしたら、RYUSさんが公開している、RyusExmailString preloadの使用をお勧めします。

コメント統合で d3forumのツリー全表示 anchor.png

元ネタ - XUGJ

tree_topicslist.jpg
  • function.d3comment_tree.phpを、smartyプラグインフォルダにコピーしてください。
    • コメント統合で付いたコメント。 質問内容が変わったりしてトピック分けしたりすると、d3forum側で「このトピックの投稿一覧へ」で閲覧してもトピック内の投稿しか表示されないため、同じ元記事に紐付いた他のトピックの投稿に気づかない場合があります。
       オリジナル版では、元記事にジャンプして初めてその存在に気づくことになっていて、最大表示記事数を超えている場合は元記事側でも他のトピの投稿が流れてしまって表示されない場合もあります。 こういう時は、仕方なく「トピック表示」にしたりしますが、訪問者から見るとコメントし辛い感じ。
       色々な案を考えてやってみたのですが、一番しっくりきたのはd3forum側で「このトピックの投稿一覧へ」を表示したときに、他のトピも含めてツリーを表示するというものです。 当該トピだけでしたら、テンプレート編集だけで行けますが、全トピのツリー表示は対策が必要です。
    • テンプレートには既に記述済みで編集不要ですが、もし応用として変更する場合は以下を参考にしてください。
      • 呼び出し例
        <{d3comment_tree forum_dirname=$mydirname forum_id=$forum.id topic_id=$topic.id external_link_id=$topic.external_link_id order="ASC" postorder=$postorder use_name=$mod_config.use_name item="tree"}>
      • 指定オプション
      1. forum_dirname: d3forumのディレクトリ名。d3forumテンプレート内では$mydirnameでOK。
      2. forum_id: コメント統合したd3forumのforum番号。d3forumテンプレート内では$forum.idでOK。
      3. topic_id: コメント統合記事以外の時に表示トピックを限定するための、topic番号。d3forumテンプレート内では$topic.idでOK。
      4. external_link_id: コメント統合記事の外部リンク番号。d3forumテンプレート内では$topic.external_link_idでOK。
      5. order: 表示の昇順/降順指定。 「ASC」=「降順」、「DESC」=「昇順」。 「d3forum_main_listposts.html 」内の記述では、ツリー構造順表示が標準ですので、ここでは何も指定しないでください。
      6. limit: ツリーに表示する最大タイトル数。 指定しなければ100件までを最大として表示します。(記事自体の表示件数ではありません。)
      7. postorder: 「投稿の新しいものから」「投稿の古いものから」をクリックした時の、表示順変更のための変数。 d3forumテンプレート内では$postorderでOK。
      8. use_name: 前項の本名表示をするかしないかのパラメータ。 $mod_config.use_name のままでOK。
      9. item: テンプレート内で参照する変数名。

テーマの色調を引き継ぐ anchor.png

 d3forumのテンプレート、モジュールCSSは、独自の色調を採用しており、テーマを変更するたびに テーマの色調に調整しなければなりません。 調整箇所を集約する工夫がなされているとはいえ、結構面倒ですし、サイト訪問ユーザーが自由に切り替えられないのは困ります。
 これを、特に見づらくなる部分を重点的にテーマのCSS要素を継承する設定に変更してあります。

謝辞 anchor.png

d3forumの当該ソースはもちろんのこと、その他のソースも参考にさせていただきました。 GIJOEさん、ありがとうございます。

改変履歴 anchor.png

2011/05/15 第三版+(0.85_003a5)

    • conventional mode のd3commentの不具合修正。(thx domifara)

2010/11/05 第三版(0.85_003a)

2010/11/04 第三版(0.85_003)

    • コメント統合クラスのObject取得処理を改善し、ループ処理内から同一のtarget_dirnameではInstance取得とし、メモリ消費量などを改善。(のつもり) 外部のmoduleなどから「D3commentObj」クラスの再利用も可能。

2010/11/01 第二版(0.85_002)

    • コメント元閲覧権限継承のほか、別のいくつかの機能を取込み。

2009/07/03 初版(0.85_001)公開


実体ページ:inc/d3com_auth_002
関連ページ:

プリンタ用画面
投票数:1489 平均点:9.37
作成:2009/7/3 23:48:04 なーお   更新:2010/11/1 21:37:30 なーお   閲覧数:31216
前
コメント統合でブロックから元記事へリンク
カテゴリートップ
XOOPSサイト構築
次
d3コメント統合の、元記事閲覧権限連動ハック Plugin版

投稿ツリー

コメント一覧

SnowTown   投稿日時 2011/1/12 15:27

こんにちは。naaoさん。

d3com_auth_diff_0.85_003a.zip の下記ファイルなのですが、
tdタグがthタグで閉じられているようです。

trust/modules/d3forum/templates/main_topicmanager.html

24行目での例

その他、28行目、34行目、40行目・・・・なども。

SnowTown   投稿日時 2011/1/12 16:11

すみません。naaoさん。

Webphoto Ver 2.32 なのですが
d3com_auth_diff_0.85_003a.zip を導入後
set valid itemname or class in of the template 」
と表示され、コメント統合部分が表示されなくなりました。
下記投稿も読みましたが、こちらはどのように修正すればよろしいのでしょうか。

http://linux.ohwada.jp/modules/newbb/viewtopic.php?viewmode=flat&order=DESC&topic_id=850&forum=13

環境
PHP: 4.4.8
MySQL: 4.0.26-standard
XOOPS: XOOPS Cube Legacy 2.1.7
Webphoto: 2.32

なーお  投稿日時 2011/1/12 17:57 | 最終変更

SnowTownさん、こんにちは。

テンプレートのthタグ残りの件、ご報告ありがとうございます。 次期修正時に反映しますね。 :-)

さて、肝心のwebphotoのd3comment統合のほうですが、webphoto-2.32をテスト環境で試してみました。 結論からいえば、webphoto側を対応いただくことになります。 (当方のd3forumの権限パッチ導入前は、正常に機能していたのでしょうか? 念のため確認です。) :roll:

  • main_photo.html テンプレート
    Everything is expanded.Everything is shortened.
     
     
     
     
     
    
      <{* d3forum_comment dirname=$cfg_comment_dirname forum_id=$cfg_comment_forum_id class="WebphotoD3commentContent" mytrustdirname="webphoto" id=$photo.photo_id subject=$photo.title_s subject_escaped=1 view=$cfg_comment_view posts_num=10 *}>
     
     ↓のように書き換え
     
      <{d3comment mydirname=$mydirname class="WebphotoD3commentContent" id=$photo.photo_id subject=$photo.title_s subject_escaped=1 view=$cfg_comment_view posts_num=10 order="asc"}>
     最後の「order=asc」は昇順表示です。 これを消せば、降順表示になります。
  • (trust側) class/WebphotoD3commentContent.class.php
    11行目あたりに、以下の1行を追加
    Everything is expanded.Everything is shortened.
     
    
    require_once XOOPS_TRUST_PATH.'/modules/d3forum/class/D3commentAbstract.class.php' ;

webphotoのコメント統合は、古いコンベンショナルなプラグイン「d3forum_comment」を使っていますので、新しい「d3comment」プラグインの方を使うように変更してもらうとありがたいですね。
(ohwadaさんのサイトの私のツリーの時には、picoなども古いほう「d3forum_comment」を使っていたのですが、その後のアップデートで「d3comment」に変更されています。)

以上、よろしくお願いします。

なーお  投稿日時 2011/4/15 14:43 | 最終変更

本ハック d3com_auth_diff_0.85_003a3 に不具合がありました。 (thx taroj)

ゲストアクセス時に、投稿リストの最終投稿ユーザー名が クイクフォームに表示され、ゲスト名の入力ができません。 投稿すると、投稿者は「ゲスト」になります。

この不具合の修正は、以下のようにしてください。

(trust側) include/viewpost.php 内の100行名付近

100
101
102
103
104
105
106
107
108
109
    // naao from
if( is_object( $xoopsUser ) ) {
    if ($xoopsModuleConfig['use_name'] == 1 && $xoopsUser->getVar( 'name' ) ) {
        $poster_uname4disp = $xoopsUser->getVar( 'name' ) ;
    } else {
        $poster_uname4disp = $xoopsUser->getVar( 'uname' ) ;
    }
 
}
    // naao to

 ↓ 108行目を編集

100
101
102
103
104
105
106
107
108
109
    // naao from
if( is_object( $xoopsUser ) ) {
    if ($xoopsModuleConfig['use_name'] == 1 && $xoopsUser->getVar( 'name' ) ) {
        $poster_uname4disp = $xoopsUser->getVar( 'name' ) ;
    } else {
        $poster_uname4disp = $xoopsUser->getVar( 'uname' ) ;
    }
 
} else { $poster_uname4disp = '' ;}
    // naao to

(trust側) include/listposts.php 内の134行名付近も同様

(trust側) include/comment_functions.php 内の344行名付近も同様

これで正しくフォームの表示が出るはずです。



新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ