当サイトではfreoの「新着エントリー表示プラグイン」(freo本体に同梱)と新着ページ表示プラグインを使ってトップページに新着情報を表示しているのですが、ここにページにつけたタグを表示しようとしたら思いのほか手間取ってしまったのでメモしておきます。

新着ページ一覧を表示するコード

freo公式の解説では

<h3>新着ページ</h3>
<div class="content">
  <dl>
    <!--{foreach from=$plugin_page_recentries|smarty:nodefaults item='plugin_page_recently'}-->
    <dt><a href="{$freo.core.http_file}/page/{$plugin_page_recently.id}">{$plugin_page_recently.title}</a></dt>
      <dd>{$plugin_page_recently.datetime|date_format:'%Y/%m/%d %H:%M'}</dd>
    <!--{/foreach}-->
  </dl>
</div>

となっており、このコードではページのタイトルとページ作成日時が表示されます。

新着ページのタグを表示するコード

※以下のコードは自分の覚書も兼ねているためSmarty3のものになっています。freoに同梱されているSmarty2を利用の場合は「 nofilter」を「|smarty:nodefaults」に読み替えてください。

すでに解説されているサイトさんもあるのですが、私の場合出力されたタグを「<span class="recentry-categories">~</span>」で囲みたい かつ タグがない場合は「<span class="recentry-categories"></span>」を出力したくなかったため以下のようにしました。

<!--{if $plugin_page_recently.tag}-->
	<span class="recentry-categories">
		<!--{foreach from=$plugin_page_recently_tags[$plugin_page_recently.id] nofilter item='page_tag' name='loop'}-->
			<a href="{$freo.core.http_file}/page?tag={$page_tag|escape:'url' nofilter}">{$page_tag}</a>
			<!--{if !$smarty.foreach.loop.last}-->, <!--{/if}-->
		<!--{/foreach}-->
	</span>
<!--{/if}-->

これを

<!--{foreach from=$plugin_page_recentries|smarty:nodefaults item='plugin_page_recently'}-->
~ この間 ~
<!--{/foreach}-->

に入れることで表示ができました。できませんでした。ただ、spanタグが出力されていたのでページにタグがあること自体は取得できているのが解りました。ここでだいぶんハマってしまった…。

display.page_recently.phpの修正

これを改善するためには「libs/freo/plugin/display.page_recently.php」109行目

$pagetags[$page] = explode(',', $pages[$page]['tag']);

を以下のように修正します。

$page_tags[$page] = explode(',', $pages[$page]['tag']);

これで「,」(半角カンマ)区切りでタグを複数のものとして表示することができます。