種別[software] cocolog:10143002
セクションJRF のソフトウェア Tips
日時2006年02月22日 17:46:31
元URLhttp://jrf.cocolog-nifty.com/software/2006/02/post_16.html
タグ[ウェブログ・ココログ関連]

Movable Type で「記事と同じカテゴリ内の最近の記事」を表示する。

プラグインを使わなくてもSSI とインデックステンプレートを組み合わせて使えば、「記事と同じカテゴリ内の最近の記事」を表示することができる。

当初、 Movable Type では Movable Type のタグの中で Movable Type のタグをネストして使うことはできないため、このようなことは不可能だと思っていた。

しかし、Apache 1.2 以降の SSI には if 文があり、その中で正規表現(というか部分文字列のサーチ = strstr)が使えることを知り、ココログプロで使える「新しいインデックステンプレート」と組み合わせれば、可能なはずだと思い致った。

問題は、このサイトではカテゴリ名に '/' を使っており、ラベルでカテゴリを指定すると正規表現の '/.../' とぶつかってしまうため、MTCategoryID を使いたいところだが、MTCategoryID は Category Archive 内などでそのまま使えない。今のところ Indivisual Archive に表示するだけなのであまり関係ないが、Archive 内などでサイドバーとして読み込もうとすると不具合が出るようにはしたくない。

しばしとまどったが《MovableType Tips: MovableType Tips Archives》にある方法でそれが解決できることがわかった。

基本的には、まず、表示したい(複数の)カテゴリの MTCategoryID を ',' で連結した文字列を作り、それを SSI の変数 CATEGORY_IDS に代入する。

次に、インデックステンプレートで、それぞれのカテゴリごとに if 文を付け、そのカテゴリの MTCategoryID (の前後に','を付けたもの)が、変数 CATEGORY_IDS 内に含まれていれば表示し、そうでなければ表示しないようにした。

  ■Individual Archives テンプレートの変更
    
このサイトでは Individual Archives の最初に次のような変更を加えた。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;

<!--#set var="CATEGORY_IDS"
    value=",<MTEntryCategories><$MTCategoryID$>,</MTEntryCategories>" -->
<html xmlns="http://www.w3.org/1999/xhtml&quot;&gt;
<head>

また、次のように更新情報のあとに include 文を足した。

<p class="posted">...</p>
<div class="entry-recent-lists">
<!--#include virtual="/<$MTBlogDirname$>/recent-lists.shtml" -->
</div>
<MTEntryIfAllowPings>

  ■新しいインデックステンプレートとして recent-lists.shtml を作る。
    
本当は拡張子を .shtml じゃなく .inc にしたかったのだが、ココログは .inc にするとコントロールパネルのファイルから見えなくなるという「仕様」なので、しかたなく .shtml にした。

Recent Lists というテンプレートを作成した。次のようなファイルである。

<a id="recent-lists"></a>
<MTCategories>
<!--#if expr="$CATEGORY_IDS = /,<$MTCategoryID$>,/" -->
<MTBlogIfArchives>
<h2>「<a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a>」カテゴリ内の最近の記事</h2>
<MTEntries lastn="5">
<div class="recent-lists-content">
<div class="recent-lists-title"><$MTEntryDate format="%Y-%m-%d"$> <a
href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></div>
<!--
<div class="recent-lists-body">
<$MTEntryExcerpt$>
</div>
-->
</div>
</MTEntries>
</MTBlogIfArchives>
<!--#endif -->
</MTCategories>
<!--#if expr="$CATEGORY_IDS = /,TOP,/" -->
<h2>「<a href="<$MTBlogURL$>"><$MTBlogName$></a>」内の最近の記事</h2>
<MTEntries lastn="5">
<div class="recent-lists-content">
<div class="recent-lists-title"><$MTEntryDate format="%Y-%m-%d"$> <a
href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></div>
<!--
<div class="recent-lists-body">
<$MTEntryExcerpt$>
</div>
-->
</div>
</MTEntries>
<!--#endif -->

はじめ Excerpt も表示されるよう書いてみたが、うっとうしかったのでコメントアウトしている。

また、CATEGORY_IDS に ',TOP,' を含めれば、そのブログ全体の最近の記事もリストされる。これを同じサイトの別のブログのサイドバーにでも入れようかと思ったのだが、これまた冗長になるのでやめた。……と思ったが《雑記》だけを他のブログのページに入れ、《雑記》には他のブログを入れることにした。

あとは CSS で適当に整えれば完成。

<b>参考</b>
  《MovableType Tips: MovableType Tips Archives》
  《個別エントリーアーカイブに同一カテゴリーのエントリーを表示》
  
■更新
  
  <b>2006-03-30</b><$MTEntryExcerpt remove_html='1'$> を <$MTEntryExcerpt remove_html='1' encode_html='1'$> にした。
  <b>2006-03-28</b>トラックバックをいただいた《観測気球》の記事を参考に tooltip に <$MTEntryExcerpt remove_html='1'$> を表示するようにしました。現在は上の記事とは違う設定になっています。
  <b>2006-03-02</b>プラグイン MTTagInvoke を使えばできることを知った。
    
更新:06/02/22,06/03/02
初公開:2006年02月22日 03:00:10
最新版:2006年03月30日 14:35:37
Trackbacks:

《ココログや Movable Type のシステムと奮戦中》 from JRF の私見:雑記
 MTEntries では sort_by と last_n を同時に使うことができず、 MTArchiveList では offset を使うことができないようだ。 また、XML-RPC で更新情報として TIMESTAMP を書き込んだとき、月をまたぐと、(週別の)個別アーカイブの位置が変わるため、Permalink が変更されてしまうようだ。 ... 

受信: 2006-02-24 01:29:24 (JST)


《当該記事の所属するカテゴリの最近の記事一覧を表示する》 from 観測気球
PHP も JavaScript も使わずに、Movable Type のテンプレートと SSI を駆使することで、個別記事にカテゴリ別最新記事一覧を差し込む方法があることを知り、採用してみました。 

受信: 2006-03-28 01:42:21 (JST)


《Movable Type と SSI を使って注目を避けるために一時的に「休止」や「ブックマーク拒否」をする》 from JRF のソフトウェア Tips
現在、ココログプロのシステムを使い「同人サイト」(というかほぼ個人のつぶやきサイトとなってる…)を整備している。そこは、仲間が見つけられるように公開ではありたいが、目立つのはあまり好ましくない。そこで、万一、目立ってしまったとき、アクセスを一時お断りするような機構が欲しいと考えた。 方法として思いついたのは、記事のカテゴリとして「休止中」や「ブックマーク拒否」というのを作り、そのカテゴリに属する場... 

受信: 2010-05-06 19:26:26 (JST)


Comments:

なお、現在のココログではデフォルトでこれと同等のことができるようになっています。この記事はココログ以外の方向けになったということですね。
投稿: JRF | 2007-07-15 18:14:14 (JST)

よぼらぼ
情色おんな秘図
襦袢の裾を乱れさせ、喘ぐ女の艶姿、悶えながらも男の精を吸い尽くす―江戸の世を舞台に繰り広げられる、淫らで妖しき五つの
http://www.8568985.com/mmgjkin/
http://www.8568985.com/garegky/
投稿: よぼらぼ | 2007-11-02 21:48:08 (JST)

According to my own exploration, thousands of persons all over the world get the credit loans at good banks. So, there is a good chance to get a bank loan in every country.
投稿: home loans | 2011-11-27 17:56:00 (JST)