【freo】【freoTips】【プラグイン系TIPS】新着コメント表示プラグインを利用してエントリーやページのコメントを別画面で一覧表示する方法
- 2013/12/02 23:53
- コメント
- 新着コメント表示プラグイン
- foreach
- 60
エントリーやページに投稿されたコメントを別ページで一覧表示してみます。
freoにデフォルトで搭載されている新着コメント表示プラグインを利用すると、投稿されたコメントを新着表示としてみなすと設定された件数分一覧表示させることができます。
デフォルトのfreoで新着コメント表示プラグインが利用されているのは、[freo/templates/utility.html]の131~147行目
<!--{if $plugin_comment_recentries|smarty:nodefaults}--> <div class="utility"> <h3>新着コメント</h3> <div class="content"> <dl> <!--{foreach from=$plugin_comment_recentries|smarty:nodefaults item='plugin_comment_recently'}--> <dt><a href="{$freo.core.http_file}/{if $plugin_comment_recently.entry_id}view/{$plugin_comment_recently.entry_id}{elseif $plugin_comment_recently.page_id}page/{$plugin_comment_recently.page_id}{/if}">Re: <!--{if $plugin_comment_recently.entry_id}-->{$plugin_comment_recently_entries[$plugin_comment_recently.entry_id].title}<!--{elseif $plugin_comment_recently.page_id}-->{$plugin_comment_recently_pages[$plugin_comment_recently.page_id].title}<!--{/if}--></a></dt> <dd> {$plugin_comment_recently.created|date_format:'%Y/%m/%d'} from <!--{if $plugin_comment_recently.user_id}-->{$freo.refer.users[$plugin_comment_recently.user_id].name}<!--{else}-->{$plugin_comment_recently.name}<!--{/if}--> </dd> <!--{/foreach}--> </dl> </div> </div> <!--{/if}-->
この部分です。
デフォルト状態だと、コメントを張られたエントリーやページのタイトルにリンクを貼って、コメントの投稿日時・投稿者を表示するようになっていますが、コメントの本文を表示させることもできます。
新着コメント表示プラグインをページでも利用できるようにする。
新着コメント表示プラグインは、デフォルトの状態だと、「デフォルト画面」「エントリー画面」「カテゴリー画面」「記事個別表示画面 (VIEW画面)」のみで利用できますが、これを他の画面(例えばページ画面)などで利用するようにするには、プラグインの編集が必要です。
[freo/libs/freo/plugins]フォルダ内のconfig.comment_recently.phpのdisplayファイルの読み込み設定を編集してください。
詳しくは↓を参照してください。
freo:プラグインを色々なページに表示する
新着コメントの表示件数を設定する。
[管理ページ]→[設定管理]→[プラグインの設定]→[新着コメント表示]で、コメントを新着としてみなす件数を設定できます。
ここで、一覧表示したい件数(全件表示したいなら例えば1000など全件よりも多い数字)を設定してみてください。
新着コメント表示用のテンプレートをコメント一覧表示用に書き換えて利用する。
コメントを一覧表示する場合は、下記のようにテンプレートを書き換えて利用するとよいでしょう。
<div id="comment"> <h2>コメント一覧</h2> <!--{foreach from=$plugin_comment_recentries|smarty:nodefaults item='plugin_comment_recently'}--> <div class="comment"> <h3><a href="{$freo.core.http_file}/{if $plugin_comment_recently.entry_id}view/{$plugin_comment_recently.entry_id}{elseif $plugin_comment_recently.page_id}page/{$plugin_comment_recently.page_id}{/if}">Re: <!--{if $plugin_comment_recently.entry_id}-->{$plugin_comment_recently_entries[$plugin_comment_recently.entry_id].title}<!--{elseif $plugin_comment_recently.page_id}-->{$plugin_comment_recently_pages[$plugin_comment_recently.page_id].title}<!--{/if}--></a></h3> <p>{$plugin_comment_recently.created|date_format:'%Y/%m/%d'}|from<!--{if $plugin_comment_recently.user_id}-->{$freo.refer.users[$plugin_comment_recently.user_id].name}<!--{else}-->{$plugin_comment_recently.name}<!--{/if}--></p> {$plugin_comment_recently.text|nl2p|autolink} </div> <!--{/foreach}--> </div>
このようにすると、コメントのついたエントリーまたはページのタイトルを表示し、コメントを本文付きで一覧表示できます。
たとえば、このようになります。
(※このページでは、管理者のコメントは別スタイルで表示するように若干テンプレートを修正しています。)
ページ画面では新着コメント表示件数を増やして表示し、デフォルト画面では最新のコメントのみを表示させる方法
上記のように編集すると、ページ画面では新たに設定された新着コメント表示件数(上の例でいうと1000件)が表示されますが、サイドメニューではその内の最新件数分(たとえば5件)のみ表示させたい場合は、また別のテンプレート編集が必要です。
例として、サイドメニュー(freo/templates/utility.html)では最新5件のみ表示させてみます。
[freo/templates/utility.html]の131~147行目を
<!--{if $plugin_comment_recentries|smarty:nodefaults}--> <div class="utility"> <h3>新着コメント</h3> <div class="content"> <dl> <!--{foreach from=$plugin_comment_recentries|smarty:nodefaults item='plugin_comment_recently' name='commentloop'}--> <!--{if $smarty.foreach.commentloop.index < 5}--> <dt><a href="{$freo.core.http_file}/{if $plugin_comment_recently.entry_id}view/{$plugin_comment_recently.entry_id}{elseif $plugin_comment_recently.page_id}page/{$plugin_comment_recently.page_id}{/if}">Re: <!--{if $plugin_comment_recently.entry_id}-->{$plugin_comment_recently_entries[$plugin_comment_recently.entry_id].title}<!--{elseif $plugin_comment_recently.page_id}-->{$plugin_comment_recently_pages[$plugin_comment_recently.page_id].title}<!--{/if}--></a></dt> <dd> {$plugin_comment_recently.created|date_format:'%Y/%m/%d'} from <!--{if $plugin_comment_recently.user_id}-->{$freo.refer.users[$plugin_comment_recently.user_id].name}<!--{else}-->{$plugin_comment_recently.name}<!--{/if}--> </dd> <!--{/if}--> <!--{/foreach}--> </dl> </div> </div>
のように変更してください。
なにが違うかというと、
- 新着コメントを繰り返して表示するためのforeachに「commentloop」という名前をつけている
- 「commentloop」というforeachの回転数が5回までなら表示する
という編集を加えています。
解説するとこんな感じです。
<!--{もし新着コメントがあったらここから}--> <div class="utility"> <h3>新着コメント</h3> <div class="content"> <dl> <!--{新着コメントの配列を「plugin_comment_recentry」として繰り返す、なお配列の名前は「commentloop」とするここから}--> <!--{「commentloop」の配列の繰り返しが5回目以下ならここから}--> <dt><a href="{$freo.core.http_file}/{if $plugin_comment_recently.entry_id}view/{$plugin_comment_recently.entry_id}{elseif $plugin_comment_recently.page_id}page/{$plugin_comment_recently.page_id}{/if}">Re: <!--{if $plugin_comment_recently.entry_id}-->{$plugin_comment_recently_entries[$plugin_comment_recently.entry_id].title}<!--{elseif $plugin_comment_recently.page_id}-->{$plugin_comment_recently_pages[$plugin_comment_recently.page_id].title}<!--{/if}--></a></dt> <dd> {$plugin_comment_recently.created|date_format:'%Y/%m/%d'} from <!--{if $plugin_comment_recently.user_id}-->{$freo.refer.users[$plugin_comment_recently.user_id].name}<!--{else}-->{$plugin_comment_recently.name}<!--{/if}--> </dd> <!--{「plugin_comment_recentry」の配列の繰り返しが5回目以下ならここまで}--> <!--{新着コメントの配列を「plugin_comment_recentry」として繰り返す、なお配列の名前は「plugin_comment_recentry」とするここまで}--> </dl> </div> </div> <!--{もし新着コメントがあったらここまで}-->