年別タイトル一覧ページの作り方

freo ではブログ(/entry)のカレンダーやサイドバーの過去ログリストリンククリックで月別アーカイブを表示することが出来ますが、その時「/entry」のテンプレートでの表示になります。

  • 「/entry」では表示速度などを考慮してそんなにたくさんのエントリーを表示していない
    • 当サイトでは10個
    • 本文全文表示してるサイトさんとかもっと少ないかも
  • ブログ閲覧時、時系列(何年何月)をもとに記事を探すことがあるか?
    • 自分は普段カテゴリーやタグリンクから目的の記事を探すことが多い
    • 時系列で探すとしたらタイトルだけざっと見られて目的の記事探す方が便利な気がする

と思ったので時系列アーカイブを表示するときはタイトル一覧になるようにしてみました。ただもう少しスマートなやり方がある気がするのでもっといい方法があるよ!という方は教えてください。

時系列アーカイブをタイトル一覧にする

参考:アーカイブスページのリストcerina

<!--{if $smarty.get.date}-->
	<ul class="list">
	<!--{foreach from=$entries|smarty:nodefaults item='entry' name='archive'}-->
		<li>
		<time datetime="{$entry.datetime|date_format:'%Y-%m-%dT%H:%M'}+09:00">{$entry.datetime|date_format:'%Y-%m-%d %H:%M'}</time>
		<a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}">{$entry.title}</a></li>
	<!--{/foreach}-->
	</ul>
	<!--{else}-->

この下に通常のエントリー表示用ループ

<!--{/if}-->

ちなみに自サイトはあんまりたくさんエントリー書いてないので、一行目を <!--{if $smarty.get.date|count_characters == 4}--> にして「年」で表示した時のみタイトル一覧になってます。

やってみたけど不具合あって保留の小技

タイトル一覧の時表示数を多くする

これもう少しうまいやり方がないかなーと思うんですが…

デフォルトだと管理画面の「設定管理→表示設定→表示件数」の「エントリーの1ページの表示件数」が適応されて、通常の「/entry」は本文とかもあるし数個表示でいいんだけれどタイトル一覧ページで数個しか表示されずページ送りっていうのは不便です。そこで思い切ってここの件数を増やします。自サイトの現在の設定は「20」にしました。で、通常の「/entry」での表示数はテンプレートを弄って調整します。

と思ったけどこれすると「/entry」やカテゴリーでの表示がおかしくなるのでダメだった!保留。

ちなみに「section」でループさせれば件数含めもっと柔軟に設定できるんだけど、

sectionだとキャッシュページで吐き出すソースコードがものすごい重いらしいんで実用化は無理そう。

とのことです…( ◞‸◟)

時系列アーカイブの件数表示

{$entries|@count} で件数表示が出来るけど処理が重いっぽい(ローカルでの確認)。保留。

上記2点に関して解決方法がわかる方が居たらぜひ教えてください!

おまけ・過去ログ時系列一覧リンクリスト

長く運営していくとデフォの過去ログリンクリストが縦に長くなってしまうので「月」は横に並ぶように。

<h3>Archives</h3>
<dl>
<!--{assign var="pid" value=""}-->
<!--{foreach from=$plugin_entry_archives|smarty:nodefaults item='plugin_entry_archive' name='loop'}-->
<!--{if $pid!=$plugin_entry_archive.year}-->
	<dt><a href="{$freo.core.http_file}/entry?date={$plugin_entry_archive.year}">{$plugin_entry_archive.year}年</a></dt>
	<dd>
<!--{/if}-->
		<a href="{$freo.core.http_file}/entry?date={$plugin_entry_archive.year}{$plugin_entry_archive.month}" title="{$plugin_entry_archive.count}件">{$plugin_entry_archive.month}月</a>
	<!--{if $smarty.foreach.loop.last}-->
	</dd>
</dl><!--{/if}-->

<!--{assign var="pid" value=$plugin_entry_archive.year}-->
<!--{foreachelse}-->
<p>エントリーが登録されていません。</p>
<!--{/foreach}--> 
<!--{/if}-->

参考:http://toro.2ch.net/test/read.cgi/blog/1306798840/91