Help us understand the problem. What is going on with this article?

【MovableType】導入コンテンツによるカテゴリ設計とアーカイブマッピング技法

More than 5 years have passed since last update.

サイトを構築する際、MovableTypeでテンプレート化をする場合、MT化するコンテンツ仕様によりカテゴリーアーカイブをどう利用するかという設計をしますがその一例をご紹介します。

前提条件

まずMT化するコンテンツでどのように情報を展開するか、URLをどうするかという点を考慮します。
例としてニュースコンテンツに対して「エンタメ」「経済」「ゲーム」という3つのカテゴリを設けるという仕様の元お話します。

シンプルな形式

ニュースコンテンツのトップがhttp://hoge.com/news/index.html
各カテゴリがhttp://news/category/index.html

と素直に出力する場合は一番シンプルです。
このときのアーカイブマッピングは

カテゴリアーカイブマッピング:%-c/%i もしくは %c/%i

でいいと思います。
上記であればサブカテゴリが作成されても「/categoryのbasename/sub_categoryのbasename/index.html」というで出力されます。

カテゴリのベースネームもそれぞれ「entertainment」「economy」「game」と指定しておけばゲームの一覧であれば「game/index.html」で
出力されます。

カテゴリ別ディレクトリでハイフンとアンダーバーを共存させたい場合

シンプル形式の記述ではカテゴリーベースネームで記述された値に「ハイフン」か「アンダーバー」のどちらかに変換させるという形になってしまいます。
問題なけばいいですが、前者のハイフンが活かされるパターンの際にアンダーバーでベースネームに登録したとき、ハイフンに変換されて出力されます。
ただ出力だけなら問題ありませんが、basenameの値を取得してCSS判定やシステム判定を行う場合は勝手に変換されるので
想定した値がこない場合があります、これを回避させるために

カテゴリアーカイブマッピング:<$MTCategoryBasename$>/%i

という形で設定すればOKです。
実はカテゴリタグがマッピングで使えるという裏技。

カテゴリベースネームを利用したファイル名で出力し、且つ親カテゴリ一覧を「index.html」で対応する場合

子カテゴリが入る場合で、シンプルな形式のものに加えて親カテゴリに俗する全ての一覧が必要な場合素直に作るのであれば
上記で対応が可能ですが、出力するURLが
親カテゴリ「category/index.thml」
子カテゴリ1「category/sub_category1.html」
子カテゴリ2「category/sub_category2.html」

という形で出力したい場合は設定を変える必要があります。
その際、デフォルトで用意されている記述ではこれは対応できません。
対応させるには下記の対応が必要になります。

カテゴリーアーカイブマッピング:
<MTHasNoParentCategory><$MTCategoryBasename$>/index.html<MTElse><MTParentCategory><$MTCategoryBasename$></MTParentCategory>/<$MTCategoryBasename$>.html</MTHasNoParentCategory>

前述もしましたがMTタグが使えるのでこういう記載も実は有効だったりします。
親子の二世代のみの仕様であれば上記でOKです。
簡単に解説すると<MTHasNoParentCategory>で親カテゴリーかどうかを判定。
トップレベルカテゴリであれば親は存在しないのでこれで対応。
子カテゴリだった場合は親カテゴリのベースネームディレクトリの下に出力するという形です。
親カテゴリのベースネームを「index」を与えがちですが、複数付与することができないので注意です。

_shogo_
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away