Movable Typeのブログ記事ページのファイル名に日別の通番を振る

Movable Typeのブログ記事ページのファイル名に日別の通番を振る

Posted at February 8,2011 1:55 AM
Tag:[Customize, MovableType, MTFileTemplate]

MTQで「Movable Typeのブログ記事ページのファイル名に日別の通番を振りたい
」という要望がありましたので情報展開しておきます。完璧なカスタマイズではありませんので予めご容赦ください。

1.カスタマイズの概要

ある1日に複数投稿されたブログ記事のファイル名に、「hoge-1.html」「hoge-2.html」という風に通番を振るにはいくつか方法があると思います。ここではアーカイブマッピングのパスにテンプレートを利用しています。

パスに設定したテンプレートの中で再構築中の記事と同じ日に投稿された記事を取得し、記事が複数ある場合のみ、再構築中の記事のファイル名に通番を振ります。

「再構築中の記事と同じ日に投稿された記事を取得」にはObjectプラグインを使って再構築のパフォーマンスが劣化しないようにしています。また、ある日の記事数が1つから2つに増えた時点で1つめの通番が付与されていないファイルを消す処理を別のプラグインで行います。

通番を完全に制御するには、日別の途中に記事が増えた場合の通番の割り振り変更、日別の記事を削除した場合のファイル削除処理など、面倒なことが山積みですが、ここでは、最低限の動作として、

  • 1日のブログ記事数が1の場合はファイル名に通番を付与しない
  • 1日のブログ記事数が1から2に増えた場合はその日の記事のすべてのファイル名に通番を付与し、通番が付与されていないファイルを削除

のみを行います。

このカスタマイズでブログ記事を削除した場合、例えば「hoge-1.html」「hoge-2.html」「hoge-3.html」という3つのファイルがある状態で「hoge-2.html」のブログ記事を削除した場合、ブログ記事アーカイブを再構築すれば、「hoge-3.html」が「hoge-2.html」となり、元の「hoge-3.html」は制御の範疇外でゴミとして残った状態になります。ただし、MTEntryPermalinkなどのテンプレートタグで「hoge-3.html」へのリンクは生成されないので、ウェブサイトからこのファイルは見えなくなります。

2.Objectプラグインのインストール

以下のリンクをたどってObjectプラグインをインストールしてください。

Objectプラグイン

3.EntryFileRemoverプラグインのインストール

以下のリンクからEntryFileRemoverプラグインをダウンロードしてインストールしてください。

EntryFileRemover.zip

4.テンプレートの作成

下のサブテンプレートを「ブログ記事のファイル名」というテンプレートモジュールで保存します。

<mt:EntryDate format="%Y%m%d" setvar="date" />
<mt:EntryID setvar="entry_id" />
<mt:SetVarBlock name="start"><mt:GetVar name="date" />000000</mt:SetVarBlock>
<mt:SetVarBlock name="end"><mt:GetVar name="date" />235959</mt:SetVarBlock>
<mt:Objects name="entry" status="2" sort="authored_on" start="$start" end="$end" incl="1">
  <mt:if tag="EntryID" eq="$entry_id">
    <mt:SetVar name="number" value="$__counter__" />
  </mt:if>
  <mt:SetVar name="counter" value="$__counter__" />
</mt:Objects>
<mt:if name="counter" gt="1">
  <mt:FileTemplate format="%y/%Y%m%d" />-<mt:GetVar name="number" /><mt:FileTemplate format="%x" />
<mt:else>
  <mt:FileTemplate format="%y/%Y%m%d" /><mt:FileTemplate format="%x" />
</mt:if>

5.アーカイブマッピングのパスの変更

ブログ記事アーカイブのアーカイブマッピングのパスに次の内容を設定します。

<$mt:include module="ブログ記事ファイル名" trim="1"$>

設定後の画像
設定後の画像

MTIncludeタグにtrimモディファイアを設定することで、テンプレートで生成されたファイル名から改行や空白を除去します。

関連記事
トラックバックURL


コメント

アーカイブマッピングのパスに<mt:include>が使えるのは衝撃的ですね(笑) この方法を使えば、もっと特殊なパス文字列の生成ルールでも、MTタグだけで書けるというのは応用が利きそうですね。

[1] Posted by magicvox.net logo : February 8, 2011 10:08 PM

>magicvox.netさん
こんばんは。
コメントありがとうございます。
藤本さんの記事でこのことを知ったのですが、これは強力ですね(笑)。
面白いパスが出てくるのを楽しみにしています。

[2] Posted by yujiro logo : February 9, 2011 12:12 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)