トップ  >  趣味の部屋  >  XOOPSサイト構築  >  d3diary  >  d3forumトピックブロックとの集約表示

d3forumの他のforumとの集約表示 anchor.png

 ★ d3diary側のブロックに標準でこの機能を取り込み済みのため、このテクは不要になりました。 ただ、他の応用としては一つの方法論として有効かと思い、残しておきます。 :hammer:


背景 anchor.png

d3diaryで実装した、d3forum統合コメントの元記事閲覧権限連動ブロック
このブロックを単独表示している分には、d3diaryの閲覧権限に連動してくれるので安心なんですが、 他のモジュールのコメントや、他の掲示板のトピックと同一ブロック内に表示することができません。

そこで、それを可能にする方法を1つ、紹介しておきます。 この方法なら、閲覧権限を気にせず従来のようにd3forumトピックブロックをまとめて表示できます。

多少、重くなりぎみですが、実用上は問題にならないかもしれないレベルです。 お試しください。

方法 anchor.png

XUGJ_BLOCKの準備 anchor.png

 「XUGJ_BLOCK」smartyプラグインを使用します。 ここでは詳細を省略しますが、入手方法などはあちこちに情報がありますので、各人で準備してください。 :-D

カスタムテンプレート作成 anchor.png

カスタムテンプレート、「_custom_d3diary_d3com_topics.html」 を以下のような内容で作成します。
ただし、内容を編集する必要がありますので、後述します。

 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
<{xugj_block file="modules/d3forum/blocks/blocks.php" func="b_d3forum_list_topics_show" options="d3forum|10|false|time|false|||2,3,4,2,24,29,30|" item="block2"}>
<{php}>
  $topics = array(); $reg_time = array();
 
  $block = $this->get_template_vars('block');    //d3diaryブロックからアサインされた
  foreach ($block['topics'] as $topic) {
    $topics[] = $topic;
    $reg_time[] = $topic['last_post_time'];
  }
 
  $block2 = $this->get_template_vars('block2');    //xugj_blockのd3forumブロックからアサインされた
  foreach ($block2['topics'] as $topic) {
    $topics[] = $topic;
    $reg_time[] = $topic['last_post_time'];
  }
 
  array_multisort($reg_time,SORT_DESC,$topics);
  $block['topics']=$topics;
  $this->assign('block',$block);
 
<{/php}>
 
<{if $block.full_view == true}>        //以下d3forumの「d3forum_block_list_topics.html」より転記
<table class="outer" cellspacing="1">
<thead>
<tr>
    <th><{$block.lang_forum}></th>
    <th><{$block.lang_topic}></th>
    <th align="center"><{$block.lang_replies}></th>
    <th align="center"><{$block.lang_views}></th>
    <th align="center" colspan="2"><{$block.lang_lastpost}></th>
</tr>
</thead>
<{foreach item=topic from=$block.topics}>
<{strip}>
<tr class="<{cycle values="even,odd"}>">
    <td><a href="<{$block.mod_url}>/index.php?forum_id=<{$topic.forum_id}>"><{$topic.forum_title}></a></td>
    <td>
    <a href="<{$block.mod_url}>/index.php?topic_id=<{$topic.id}>#post_id<{$topic.last_post_id}>">
    <{if $topic.u2t_marked}><img src="<{$block.mod_imageurl}>/block_marked.gif" alt="<{$block.lang_alt_marked}>" /><{/if}>
    <{* displays the last post's subject or topic title *}>
    <{if $block.disp_last_subject }>
    <{$topic.last_subject}>
    <{else}>
    <{$topic.title}>
    <{/if}></a>
    <{if ! $topic.solved}><img src="<{$block.mod_imageurl}>/block_unsolved.gif" alt="<{$block.lang_alt_unsolved}>" /><{/if}></td>
    <td align="center"><{$topic.replies}></td>
    <td align="center"><{$topic.views}></td>
    <td align="center" nowrap="nowrap"><{$topic.last_uname}></td>
    <td align="right" nowrap="nowrap"><{$topic.last_post_time_formatted}></td>
</tr>
<{/strip}>
<{/foreach}>
</table>
 
<div style="text-align:right; padding: 5px;">
<a href="<{$block.mod_url}>/index.php?page=search"><{$block.lang_linktosearch}></a>
&nbsp;
<{if is_numeric( $block.forums ) }>
<a href="<{$block.mod_url}>/index.php?forum_id=<{$block.forums}>"><{$block.lang_linktolisttopics}></a>
<{else}>
<a href="<{$block.mod_url}>/index.php?cat_ids=<{$block.categories}>"><{$block.lang_linktolisttopics}></a>
<{/if}>
&nbsp;
<{if is_numeric( $block.categories ) }>
<a href="<{$block.mod_url}>/index.php?cat_id=<{$block.categories}>"><{$block.lang_linktolistforums}></a>
&nbsp;
<{/if}>
<a href="<{$block.mod_url}>/index.php"><{$block.lang_linktolistcategories}></a>
</div>
 
<{else}>
 
<ol style="padding:3px;margin:0;">
<{foreach item=topic from=$block.topics}>
    <li>
    <a href="<{$block.mod_url}>/index.php?topic_id=<{$topic.id}>#post_id<{$topic.last_post_id}>">
    <{$topic.title}></a>(<{$topic.replies}>) <{$topic.last_uname}> <{$topic.last_post_time_formatted}></li>
<{/foreach}>
</ol>
<{/if}>

カスタムテンプレート編集 anchor.png

    • xugj_blockのパラメータ群
      xugj_blockを使って、集約表示する他の掲示板群データを取得します。
      1. file="modules/d3forum/blocks/blocks.php"
         ここの「d3forum」は、集約表示する対象のd3forum掲示板群の、d3forumのhtml側ディレクトリ名に変更します。
      2. options="d3forum|10|false|time|false|||2,3,4,2,24,29,30|"
        ブロック関数に渡される各パラメータが、| | で区切られています。
      • 第1引数 「d3forum」は、集約表示する対象のd3forum掲示板群の、d3forumのhtml側ディレクトリ名に変更します。
      • 第2引数 「10」は、取得件数です。
      • 第3引数 「false」は、ここでは意味はありません。
      • 第4引数 「time」で、最新の記事から取得します。
      • 第5引数 「false」は、チェックしたトピックの優先表示を行う場合にtrueとします。
      • 第6引数 「」には、取得対象のd3forumのカテゴリ番号を記載します。但し、第8引数とのOR条件にはなりませんので要注意。
      • 第7引数 「」は、ここでは意味はありません。
      • 第8引数 「2,3,4,2,24,29,30」には、取得対象のd3forumのforum_id番号を「,」(カンマ)区切りで記載します。 ここでは、別ブロックから取得される日記コメントのforum_idは除外します。(そうしないと、コメントがだぶって表示されてしまいます。) また、第5引数とのOR条件にはなりませんので要注意。
      • 第9引数 「」は、ここでは意味はありません。
    • テンプレート部分の編集
       39行目付近と78行目付近の下記のように記述することも可能です。
      ここで「$topic.forum_id == 5」の部分は、d3diaryのコメント統合したforum_id番号(ここでは5でしたが、実際の番号)を指定することでd3diaryコメントのリンク飛び先を変更できます。 こうすることで、ユーザーは直に日記記事とコメント表示画面に飛べますので、必要に応じて設定してください。
       もちろん、編集せずにオリジナル記述のままでも構いません。
      Everything is expanded.Everything is shortened.
       
       
       
       
       
      
          <{if $topic.forum_id == 5}>
              <a href="<{$xoops_url}>/modules/diary/index.php?page=detail&amp;bid=<{$topic.link_id}><{$block.unique_key}><{$topic.unique_path}>">
          <{else}>
              <a href="<{$block.mod_url}>/index.php?topic_id=<{$topic.id}>#post_id<{$topic.last_post_id}>">
          <{/if}>

ブロックの複製 anchor.png

  1. d3diaryの「日記コメントトピック 」を「複製」します。
  2. 複製したブロックの「編集」
    • 表示件数は、d3diaryコメント分のみの取得件数になります。
    • フルサイズ表示するかどうか、ここの指定が表示時に有効になります。
    • 「このブロックのテンプレート」に、先ほど作成したカスタムテンプレート「_custom_d3diary_d3com_topics.html」を指定します。
      090620_d3com_aggre.gif

結果のスクリーンショット anchor.png

  • 閲覧権限フィルター付き日記コメントトピックと、他の掲示板トピックの集約表示
    090620_d3com_block_aggre.gif
  • 閲覧権限フィルター付き日記コメントトピックと、他の掲示板トピックの別ブロック表示
    (単に2つの標準ブロックを表示しただけ)
    090620_d3com_block_separate.gif

実体ページ:inc/d3diary/d3com_aggre
関連ページ:d3diary開発日記

プリンタ用画面
投票数:97 平均点:4.02
前
d3diary開発日記
カテゴリートップ
d3diary

新しくコメントをつける

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