Movable Typeのカテゴリのベースネームについて

Movable Typeのカテゴリのベースネームについて

Posted at December 9,2012 2:22 AM
Tag:[Category, MovableType]

Movable Typeでカテゴリのベースネームに関する失敗事例を紹介します。

この記事は「Movable Type Advent Calendar 2012」の9日目になります。

1.事例

当ブログのカテゴリ構成を見直そうと思い、手始めに「自作プラグイン」というカテゴリにひとくくりにしていた自作プラグイン記事のカテゴリを細かく分割するところから始めました。

で、MT5の管理画面の「ブログ記事」→「カテゴリ」で、「自作プラグイン」の下に新しいサブカテゴリをばんばん追加していきました(下)。

カテゴリ追加

このあと再構築したところ、新しく追加したカテゴリページが他のページと重複していることに気がつきました。

2.原因

原因は次の通りです。

まず、カテゴリ管理画面で日本語のカテゴリ(またはサブカテゴリ)を作成した場合、カテゴリあるいはサブカテゴリのベースネームには「catx」という名称が自動的に付与されるようになっています。

さらに「x」の部分は、カテゴリまたはサブカテゴリ単位に「1」から開始してインクリメントされていきます(厳密には「cat」から開始)。

この規則にしたがうと、サブカテゴリのベースネームは親カテゴリと同じベースネームになる場合があります。

下のスクリーンショットはベースネームが重複した例で、「お知らせ」のベースネームが「cat1」、そのサブカテゴリとして追加した「いいい」のベースネームも「cat1」になっています。

ベースネームが重複した例

ただし、デフォルトのカテゴリアーカイブのパスは、

category/sub-category/index.html

となっています。下のスクリーンショットはそのアーカイブマッピングです。

MTデフォルトのアーカイブマッピング
MTデフォルトのアーカイブマッピング

この設定であれば、先程の親カテゴリ「お知らせ」のページの出力パスは、

cat1/index.html

サブカテゴリ「いいい」のページの出力パスは、

cat1/cat1/index.html

となるので、ベースネームが重複しても問題ないはずなのですが、当ブログはサブカテゴリが導入される前のバージョンでブログを始めたので、カテゴリ出力パスにMTCategoryBasenameタグしか使っていませんでした(ということをすっかり忘れてたのが根本的な問題)。

当ブログのアーカイブマッピング
当ブログのアーカイブマッピング

このため、先程の親カテゴリ「お知らせ」のページの出力パスは、

cat1/index.html

サブカテゴリ「いいい」のページの出力パスも、

cat1/index.html

となり、同じベースネームのカテゴリページが同じパスで出力されてしまってました。

3.対処

本来はサブカテゴリを意識したアーカイブパスに変更すべきところですが、それを行ってしまうとこれまでに作成したカテゴリのパスに影響してしまうため、新しく作成したカテゴリのベースネームを他のカテゴリのベースネームと重複しないものに変更しました。

で、修正したのが冒頭のスクリーンショットです。

4.記事投稿画面でのカテゴリ追加について

余談ですが、記事投稿画面でのサブカテゴリ追加では、カテゴリ全体でベースネームが重複しないようになっているようです。

下のスクリーンショットは記事投稿画面で「ううう」「えええ」というカテゴリを作成したところです(「あああ」「いいい」は削除しました)。

記事投稿画面でのカテゴリ追加

これをカテゴリ管理画面で見ると、重複しないベースネームが与えられていることが分かります。

重複しないベースネーム

実は当ブログのサブカテゴリ追加は、これまで記事投稿画面でしか行っていなかったため、運よくページの重複を避けられていたようです。

5.カテゴリ追加の動作の違い

記事投稿画面とカテゴリ管理画面のカテゴリ追加動作の違いの理由は次のとおりです。

記事投稿画面でのカテゴリ追加は1カテゴリ単位に行われます。で、追加時にMTのデータベースにアクセスするため、他のカテゴリと重複しないベースネームを割り当てることができます。

一方、カテゴリ管理画面でのカテゴリ作成は操作性重視で、画面上でいろいろ操作した最後に「保存」をクリックしてまとめて保存するという仕様になっているので、記事投稿画面のようにカテゴリを追加するたびに重複しないベースネームを付与するということは行っていません。

6.まとめ

アーカイブパスがサブカテゴリを意識した形式になっていれば今回の問題は発生しませんが、そうでない場合、たとえばサブカテゴリ機能がない旧バージョンからMTをバージョンアップする際や、カテゴリのパスをベースネームだけに変更する場合は、

  • カテゴリ管理画面でカテゴリまたはサブカテゴリを追加する場合、ベースネームが他のカテゴリのベースネームと重複していないかチェックし、重複している場合は変更(重複していなくても適切な名称への変更がいいかも)
  • 記事投稿画面でサブカテゴリを追加

といった対応が必要となります。

ベースネーム「cat」はカットしましょう。

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


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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