メイン

2006年03月18日

エントリにデータを埋め込む(3)

もう一つ、エントリにデータを埋め込むプラグインとして、藤本壱さんが作った「EntryField」というプラグインがあります。
僕が作っているマンガデータベースサイト「コミックホームズ」(http://comich.net)で使わせていただいています。
「EntryField」プラグインのダウンロード先はこちら。
http://www.1-fuji.com/mtbook/download2.php
プラグインの使い方の詳細は、藤本さんの著書「MovableType上級カスタマイズ術」
http://www.amazon.co.jp/exec/obidos/ASIN/477412379X/ref=ase_hajimefujimos-22/503-9783606-8195161
に出ていますが、ここでは簡単に「コミックホームズ」での利用法を書いてみます。

「コミックホームズ」は、エントリ=1作品、カテゴリ=作家、雑誌、コミックス名と割り当てて作品データベースを作っています。
エントリでは、

タイトル=作品タイトル/サブタイトル・回
本文=掲載ページ情報(開始ページ、ページ数、カラーページ数)
追記=作品のコメント

と割り当てています。
この、本文に掲載ページ情報を埋め込むところで「EntryField」プラグインを使います。
例えば「雑誌の10ページ目から掲載、全部で52ページ、うちカラーが2ページ」というページ情報を記録するのに、

<!--
<page_start>010</page_start>
<page_number>052</page_number>
<page_color>C2</page_color>
-->

とすればいいです。
最初と最後を<!--と-->で囲んでいるのは、ページで本文を表示した時にコメントアウトされて画面に表示されないようにするためです。
フィールドの値を囲んでいるタグ <page_start> などは半角英数字で自由に定義できます。
テンプレート内では、

<MTEntryField field="page_start">

などとして、これらの値を出力します。

以上が基本的な使い方ですが、「コミックホームズ」ではこの記録方法をちょっとアレンジしています。
例えば、花とゆめ2001年1号に掲載された作品の場合、本文欄に

<!--
<hanayume200101>010,052,C2</hanayume200101>
-->

と入力しています。
フィールドを囲んでいるタグ <hanayume200101> と </hanayume200101> は雑誌カテゴリ名で定義しています。
なぜこうしているかというと、作品によっては複数の雑誌に掲載されることがあり、それぞれの雑誌のカテゴリアーカイブで、それぞれのページ情報を表示したいからです。
例えば上記の作品が、別冊花とゆめ2004年5月号に再掲載された場合は、本文欄にその情報を追加して、

<!--
<hanayume200101>010,052,C2</hanayume200101>
<betsuhana200405>120,052,BW</betsuhana200405>
-->

とします。
雑誌のカテゴリアーカイブでは、この値を参照してページ情報を出力します。
カテゴリアーカイブのテンプレートで

<MTEntryField field="<MTCategoryLabel>">

と書いてそのカテゴリ(雑誌)に対応した値を出力したい所なんですが、アトリビュートにMTタグは使えないので、「MTTagInvoke」プラグイン
http://www.nonplus.net/software/mt/MTTagInvoke.htm
を使って、以下のように書いています。

<MTTagInvoke tag_name="MTEntryField">
<MTTagInvokeAttribute name="field"><MTCategoryLabel></MTTagInvokeAttribute>
</MTTagInvoke>

これで、その雑誌カテゴリに対応した掲載ページ情報を取り出せます。

ここでは作品の掲載ページ情報を登録しましたが、「カテゴリに応じた何かのデータをエントリに埋め込む」方法として、いろいろ活用できると思います。

エントリにデータを埋め込む(2)

エントリにいろいろなデータを埋め込むのに便利な、「RightField」というプラグインがあります。
ダウンロードと使い方はこちら。

http://www.staggernation.com/mtplugins/RightFields/

使い方の詳しい説明があります。ただし全て英語です(笑)

エントリの既存のフィールド「タイトル」「本文」「追記」「概要」「キーワード」それぞれに対して、形式(テキスト、数値、チェックボックス、日付、選択メニューなど)をカスタマイズできます。
また、新しいフィールドを追加することができます。
これらのフィールドの管理、値の入力などはプラグイン管理の画面からグラフィカルなインターフェース(GUI)でできます。

テンプレート内では、以下のようにしてフィールドの値を参照できます。

<MTExtraFields>
<MTExtraFields field="フィールド名">
</MTExtraFields>

MTでデータベースサイトを作りたいと思っている人は、まずは試してみてはいかがでしょうか。

エントリにデータを埋め込む(1)

MovableTypeで、単なるブログではなく、データベースサイトなどを作りたい場合、エントリにいろいろなデータを埋め込みたくなります。
そのテクニックについて書いてみます。

エントリでは、「タイトル」「本文」「追記」「概要」「キーワード」などが入力できます。
ちなみに「キーワード」欄は、新規エントリ作成画面で初期状態では表示されませんが、画面下の「画面の表示設定を変更」をクリックして、設定ウインドウで「カスタム」を選んで表示することができます。
ここまでで、エントリに記録できるフィールドが5個あることになります。

また、バージョン3.2から実装された「エントリのファイル名」を無理矢理使うと、6個になります。
エントリアーカイブを書き出す出力フォーマットは、初期設定で

yyyy/mm/entry_basename.html

となっていますが、これを例えば

yyyy/mm/<MTEntryID>.html

などとして、エントリのファイル名を使わない設定にすれば、別のフィールドとして利用できます。
テンプレート内では、<MTEntryBasename>というタグで参照・表示できます。

それぞれ「概要」「キーワード」などと名前が付いてますが、別にそのとおりに利用しなくてもいい訳です。
例えば、僕が作っているマンガデータベースサイト「コミックホームズ」の中にあるリンクページ(http://comich.net/link1.html)では、以下のようにフィールドを割り当ててリンク集を作っています。

タイトル=リンク先のサイト名
本文=リンクの説明
追記=バナー画像のURL
キーワード=サイトのURL

MTでリンク集を作ると、カテゴリ分けもできますし、サイトの追加・削除もエントリ作成画面ですぐにできますし、なかなか便利です。

2006年03月16日

エントリアーカイブのファイル名が「post_1.html」になってしまう

エントリアーカイブのファイル名が「post_1.html」といった名前になり、複数のエントリでリンク先が同じになってしまって困ることがあります。
エントリアーカイブのファイル名ですが、MT3.2のデフォルトのアーカイブマッピング設定では、

yyyy/mm/entry_basename.html

という設定になっています。
(メニューでは「設定」→「公開」のページの下の方です)
この「entry_basename」ですが、デフォルトではエントリのタイトルから自動生成します。
例えば英語のタイトル

I Love You!

だと、大文字→小文字、スペース→「_」などの変換が行われて

i_love_you.html

というファイル名になるのですが、日本語のタイトルの場合は変換がおかしくなります。
そのため、違うエントリなのに同じファイル名になってしまう、ということが起こります。

●対策(1)

エントリ投稿画面で自分でファイル名を指定するといいです。
(MT3.2からその機能が付きました)
まず、エントリ投稿画面にファイル名の欄を表示させます。

◇エントリ投稿画面で下の方にある「画面の表示設定の変更」をクリック
◇設定ウインドウが出るので、「拡張」を選択して「OK」

そうすると、エントリ投稿画面に「エントリー・ファイル名」の欄が出てきます。
欄の右にある鍵のマークをクリックして、ロックを解除します。
そして英語のファイル名を指定すると、それが個別エントリアーカイブのファイル名になります。
ただし、他のエントリとは違うユニークなファイル名にしないといけません。

●対策(2)

いちいちファイル名を指定するのが面倒ならば、個別エントリアーカイブのアーカイブマッピングの設定で、例えば

<MTEntryDate format="%Y/%m/%d_%H%M">.html

とすればいいでしょう。
例えば、2006年2月17日21:00に投稿すれば、ファイル名が「2006/02/17_2100.html」になります。
1分以内に違うエントリを複数投稿することはないでしょうから、必ずユニークなファイル名にできると思います。

エントリアーカイブで同カテゴリのエントリタイトルだけ表示

エントリアーカイブページのメニューで、そのエントリと同じカテゴリに属するエントリタイトルだけ表示させたい、ということがあります。
今見ているエントリに関係する他のエントリを見たい時に便利ですよね。
普通に

<MTEntries>
<a href="<$MTEntryPermalink$>"><MTEntryTitle></a><br>
</MTEntries>

とすると、全部のエントリタイトルが表示されてしまいます。
標準タグだけでは実現は難しいのですが、ちょうどその機能を実現するプラグインがありますので、紹介します。

●EntryCategoryEntriesプラグイン
http://as-is.net/hacks/2005/10/entry_category_entries_plugin.html

英語ページなのでわかりづらいかと思いますが、

「EntryCategoryEntries.zip」のリンクをクリックしてダウンロード
→ダウンロードしたファイルを解凍
→解凍されたEntryCategoryEntries.plをMTのpluginディレクトリへアップロード

の手順で使えます。
あとはエントリアーカイブのテンプレートで、

<MTEntryCategoryEntries>
<a href="<$MTEntryPermalink$>"><MTEntryTitle></a><br>
</MTEntryCategoryEntries>

と書けば、そのエントリと同じカテゴリに属するエントリタイトルが一覧表示できます。
ただし、そのエントリ自身のタイトルも表示されてしまいますのでご注意を。