メイン

2006年03月16日

カテゴリ名に日本語を使う方法(3)応用編

(2)で書いたカテゴリ名埋め込みワザを応用すると、カテゴリリストでカテゴリを「意図した順番」「五十音順」などに並べることができます。

●例1:意図した番号順に並べる

カテゴリ名の先頭に「<>」で囲んで番号を埋め込みます。

<1><orange>みかん
<2><apple>りんご
<3><grape>ぶどう

テンプレートでは、先に書いたように
<MTCategoryLabel decode_html="1" remove_html="1">
としてやると、こんな表示でページが生成されます。

みかん
りんご
ぶどう

●例2:漢字の読みがな順に並べる

例えばカテゴリ名に

斎藤 (さいとう)
冴島 (さえじま)
佐藤 (さとう)

という名前を付けた場合、普通にカテゴリリストを出力すると文字コード順で

佐藤
斎藤
冴島

と並んでしまいます。
これを防ぐために、以下のようにカテゴリ名を設定します。

<さいとう><saito>斎藤
<さえじま><saejima>冴島
<さとう><sato>佐藤

こうすると、カテゴリリストでちゃんと五十音順(読み仮名順)で並びます。

カテゴリ名に日本語を使う方法(2)

カテゴリ説明欄 <MTCategoryDescription> を使う方法だと、実は不便なことがたくさんあります。

◇カテゴリ説明欄が本来の「説明欄」として使えない
例えば商用ECサイトで、商品のカテゴリを作る場合は、そのカテゴリの説明を入れたいでしょう。

◇カテゴリ数が膨大にあると、いちいち説明欄を入れるのが面倒

◇エントリ書き出しでバックアップを取っても、カテゴリ説明欄は出力されない
カテゴリ名は出力されますが、カテゴリ説明欄は出力されないので、バックアップできません。

こうした不都合から、僕は自分のサイト「コミックホームズ」では、カテゴリ名にディレクトリ名を埋め込む方法を使っています。
カテゴリ名を以下のように設定します。

カテゴリ1<cat1>
(※<、> は実際には半角文字)

カテゴリアーカイブの出力設定では、例えば
<MTCategoryLabel dirify="1">/index.html
とします。
これで全角文字と「<」「>」が削除されて、「cat1/index.html」になります。
(※追記)
MT3.17まではこれでよかったのですが、MT3.2ではディレクトリ名の処理が変わったようです。
デフォルトの「category/sub_category/index.html」のままで、自動的にdirify="1"がかかってうまく行きます。

テンプレートでカテゴリを表示したい部分では以下のようにします。
<MTCategoryLabel decode_html="1" remove_html="1">

こうすると、まず「decode_html="1"」でHTMLタグへの変換が行われて、

カテゴリ1<cat1>

となり、次に「remove_html="1"」でHTMLタグが削除されて、

カテゴリ1

とめでたく日本語だけ残ります。
なかなか便利な方法ですので、試してみてください。

2006年03月15日

カテゴリ名に日本語を使う方法(1)

よく知られていることですが、カテゴリ名に日本語を使うと、アーカイブ出力設定で

category/sub_category/index.html (これはMT3.2でのカテゴリアーカイブのデフォルト)

などとしている場合、「cat01」などと勝手な英数字のディレクトリ名がついてしまいます。
これは、アーカイブ出力設定ではカテゴリ名に対して「dirify="1"」(半角アルファベットと数字以外を削除)が自動的に働いてしまい、日本語の部分が削除されてしまうからです。

これを防ぐ方法ですが、まずは一般的によく使われる方法を書きます。
例えばカテゴリ名に「カテゴリ1」と全角文字をつけたい場合、カテゴリ名を「cat1」とつけておいて、そのカテゴリの説明欄に日本語の「カテゴリ1」を入れます。
こうすると、上記のアーカイブ出力設定では「cat1」がそのまま使われます。
テンプレート内のカテゴリ名を表示する部分では、<MTCategoryLabel> の代わりに <MTCategoryDescription> を使ってやります。これで日本語のカテゴリ名「カテゴリ1」が表示されます。