MT4iでカテゴリーを任意の順序に並べ替える

Movable Typeを携帯電話に対応させる際には、太鉄氏が作成した「MT4i」を使うことが一般的です。
このMT4iで、カテゴリーセレクタに表示されるカテゴリー一覧を、任意の順序で並べ替えられるようにするカスタマイズを紹介します。

1.概要

Movable Typeでは、カテゴリーの一覧を出力すると、文字コード順に並べ替えられます。
任意の順序に並べ替えるには、この性質を逆手にとって、カテゴリーの先頭に連番を振っておき、カテゴリーを出力する際に連番をカットするという手法があります。
その際には、拙作のcutfirstcharプラグインを使います。

ただ、MT4iはBlogのデータに直接アクセスし、テンプレートを使わずにページを出力しています。
そのため、cutfirstcharをはじめとして、テンプレートタグやグローバルフィルターを追加するプラグインを使うことが使えません。

たいていのプラグインは、使えなかったからと言って、MT4iでBlogを見る分にはほとんど影響がありません。
しかし、拙作のcutfirstcharプラグインを使って、パソコン向けのBlogではカテゴリーを並べ替えて表示している場合、MT4iではカテゴリーの先頭に番号が表示されてしまい、見た目が良くありません。
この問題を解決するには、MT4iのソースを一部書き換えて、cutfirstcharプラグインと同等の処理を入れます。

2.書き換える箇所

MT4i 2.0の場合、mt4i.cgiの464行目の後に1行追加するだけです。
464行目は以下のようなものです(以下の通り検索すると、最初に見つかる行です)。

my @cd_tmp = split(",", $cat_data);

この行の後に、以下の1行を追加します。
最後の「n」の部分は、切り取る文字数に置き換えます。例えば、カテゴリーの先頭に3桁で連番を振っているなら、「n」を「3」に置き換えます。

$cd_tmp[1] = substr $cd_tmp[1], n;

ソースの書き換えが終わったら、mt4i.cgiをアップロードしなおします。
また、MT4iの設定ページ(mt4imgr.cgi)で、以下の箇所を設定します。

  • 「CatDescSort - カテゴリ名のソート」の項目を「昇順」に設定
  • 「CatDescReplace - カテゴリ名のDescription置換」の項目を「行っていない」に設定

これで、カテゴリー名の先頭につけた番号の順に、カテゴリーが並べ替えられて表示されます。