記事本文
カテゴリアーカイブのディレクトリ構造
Movable Type 3.11 にてサブカテゴリ機能というものが実装される前は、どのカテゴリにおいても全て同じレベルのカテゴリとして扱われていました。 すなわち、カテゴリアーカイブを置くディレクトリ以下に、全てのカテゴリアーカイブが並べられていたのです。 しかし、サブカテゴリと名がつくならば、親カテゴリより下位のディレクトリに置かれるのが自然だろうと思います。
Movable Type 3.11 のサブカテゴリ機能についての所感 (2) - MySQL 使用時におけるサブカテゴリの扱いにて用いたモデルを元に考えてみます。
- www
- internet
- browser
- firefox
- extension
- firefox
- browser
- website
- accessibility
- bookmarklet
- css
- html
- php
- internet
従来のカテゴリアーカイブのディレクトリ構造
前項のモデルを、実際に Movable Type 3.0 以前のものでカテゴリの設定を行った場合の URI は以下のようになります。
なお、カテゴリアーカイブが置かれる URI は、ウェブログの設定→アーカイブの設定にてアーカイブ・ファイルのテンプレートを設定することで変更できますが、この例では
category/<$MTArchiveCategory dirify="1"$>/index.html
と設定したとして進めていきます。
- <$MTBlogArchiveURL$>category/www/index.html
- <$MTBlogArchiveURL$>category/internet/index.html
- <$MTBlogArchiveURL$>category/browser/index.html
- <$MTBlogArchiveURL$>category/firefox/index.html
- <$MTBlogArchiveURL$>category/extension/index.html
- <$MTBlogArchiveURL$>category/email/index.html
- <$MTBlogArchiveURL$>category/website/index.html
- <$MTBlogArchiveURL$>category/accessibility/index.html
- <$MTBlogArchiveURL$>category/bookmarklet/index.html
- <$MTBlogArchiveURL$>category/css/index.html
- <$MTBlogArchiveURL$>category/html/index.html
- <$MTBlogArchiveURL$>category/php/index.html
このように、元々トップレベルカテゴリの概念もサブカテゴリの概念もないため、
<$MTBlogArchiveURL$>category/
の直下に、全て同一レベルで配置されます。
サブカテゴリを含むカテゴリアーカイブのディレクトリ構造
次に、実際に Movable Type 3.11 でサブカテゴリの設定を行った場合の URI について考えてみます。 ウェブログの設定→アーカイブの設定にてアーカイブ・ファイルのテンプレートの部分に何も設定をしなかった場合は以下のようになります。
- <$MTBlogArchiveURL$>/www/index.html
- <$MTBlogArchiveURL$>/www/internet/index.html
- <$MTBlogArchiveURL$>/www/internet/browser/index.html
- <$MTBlogArchiveURL$>/www/internet/browser/firefox/index.html
- <$MTBlogArchiveURL$>/www/internet/browser/firefox/extension/index.html
- <$MTBlogArchiveURL$>/www/internet/browser/firefox/index.html
- <$MTBlogArchiveURL$>/www/internet/email/index.html
- <$MTBlogArchiveURL$>/www/internet/browser/index.html
- <$MTBlogArchiveURL$>/www/website/index.html
- <$MTBlogArchiveURL$>/www/accessibility/index.html
- <$MTBlogArchiveURL$>/www/bookmarklet/index.html
- <$MTBlogArchiveURL$>/www/css/index.html
- <$MTBlogArchiveURL$>/www/html/index.html
- <$MTBlogArchiveURL$>/www/php/index.html
- <$MTBlogArchiveURL$>/www/internet/index.html
サブカテゴリを含むカテゴリアーカイブのアーカイブ・ファイルのテンプレート
さて、前項のように、サブカテゴリのレベルに合わせてカテゴリアーカイブのディレクトリが作られました。 ただし、これはウェブログの設定→アーカイブの設定にてアーカイブ・ファイルのテンプレートの部分に何も設定をしなかった場合の話です。
何も設定をしなかった場合は
<$MTBlogArchiveURL$>
の直下に配置されますが、設計段階で
<$MTBlogArchiveURL$>category/<$MTCategoryLabel$>
のように、カテゴリアーカイブは category/ 以下にまとめて、管理をスムーズに行いたいと思うことがあるかもしれません。
そういった時に今までと同様
category/<$MTArchiveCategory dirify="1"$>/index.html
とウェブログの設定→アーカイブの設定にてアーカイブ・ファイルのテンプレートを設定した場合、トップレベルカテゴリとサブカテゴリの区別なく、
<$MTBlogArchiveURL$>category/<$MTCategoryLabel$>
として一様に配置されてしまいます。
きちんとディレクトリ構造を持ったまま設定したい場合はどうすればいいのか。 ウェブログ設定ガイド - アーカイブの設定を一通り読んでもそういった記述は特に見当たりません。 そこで、テンプレート・ タグに似たような機能を持ったタグがないか、それによって代替できないかを探してみました。
MTSubCategoryPath
テンプレート・ タグ - MTSubCategoryPath というテンプレート・タグがあります。
- MTSubCategoryPath
ショートカット・タグ(通常のタグ)。 以下のテンプレート・コードが使われているかのように戻ります。
<MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories>
この説明中にあるテンプレート・ タグ - MTParentCategories の解説を見てみると、
- MTParentCategories
現在のカテゴリーの最上レベルの親から始まり、コンテナの各再帰で、現在のカテゴリーまでのパスまで続くコンテナ・タグ。
アトリビュート:
- glue
リストをつなぎ合わせるテキスト
- exclude_current
「1」を設定するとリストから現在のカテゴリーを除く
よって、今回のモデルにおける一番下位のレベルにある extension カテゴリを例にとって考えると、最上レベルの親 ( www カテゴリ ) から始まり、 internet → browser → firefox と続いて extension カテゴリまでつながります。
( 各カテゴリは
glue="/"
の指定によって、 / で連結されます。 )
これより、
category/<$MTSubCategoryPath$>/index.html
とアーカイブ・テンプレートのファイルに記述することによって、サブカテゴリの階層を保持したままディレクトリ構造を作ることができます。
- <$MTBlogArchiveURL$>/category/www/index.html
- <$MTBlogArchiveURL$>/category/www/internet/index.html
- <$MTBlogArchiveURL$>/category/www/internet/browser/index.html
- <$MTBlogArchiveURL$>/category/www/internet/browser/firefox/index.html
- <$MTBlogArchiveURL$>/category/www/internet/browser/firefox/extension/index.html
- <$MTBlogArchiveURL$>/category/www/internet/browser/firefox/index.html
- <$MTBlogArchiveURL$>/category/www/internet/email/index.html
- <$MTBlogArchiveURL$>/category/www/internet/browser/index.html
- <$MTBlogArchiveURL$>/category/www/website/index.html
- <$MTBlogArchiveURL$>/category/www/accessibility/index.html
- <$MTBlogArchiveURL$>/category/www/bookmarklet/index.html
- <$MTBlogArchiveURL$>/category/www/css/index.html
- <$MTBlogArchiveURL$>/category/www/html/index.html
- <$MTBlogArchiveURL$>/category/www/php/index.html
- <$MTBlogArchiveURL$>/category/www/internet/index.html
なお、従来は
category/<$MTArchiveCategory dirify="1"$>/index.html
のように dirify 属性を使うことで、日本語や空白文字が含まれるカテゴリ名への対処を行っていましたが、 MTSubCategoryPath は
<MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories>
と同様のコードとなるため、
dirify="1"
を改めて指定する必要はありません。

