Movable Type 備忘録
カテゴリを任意の順番に並べ替える2
- Prev Page: MTIncludeについて
- Next Page: MT3.3標準タグ機能とtagwireプラグインを併用する
最近、正規表現なるものに興味がありまして、正規表現について教わってきました。
以前紹介したカテゴリを任意の順番に並べ替えるやカテゴリのディレクトリ名に任意の名前を付けるを実現するのに、それぞれの機能を満たすためのプラグインをインストールする必要がありましたが、正規表現を使うことで1つのプラグインで済むようになりました。
プラグインにもよりますが、MovableType(ムーバブルタイプ)のバージョンに依存したりするので、個人的にはプラグインを使わずに済む方法をなるべく試行錯誤してきました。
今回は、カテゴリを任意の順番に並べ替えるカスタマイズと、カテゴリのディレクトリ名に任意の名前を付けるカスタマイズを紹介してみます。
まずは、百聞は一見に如かず ( ̄∇ ̄)b ですね。
サンプルをご覧ください。
以下はわたしのブログで作っているカテゴリの構成になります。
上記からも分かるように、
3桁の数字+カテゴリの英字名+( カテゴリの日本語名 )
というフォーマットで作成しています。
青い字の部分がカテゴリの順番を意味します。
わたしのブログではカテゴリの階層を2階層までと決めてるので3桁で十分なのですが、人によってはもっと深くネストしてる人もいますよね。
そこら辺は各自の環境に合わせて桁数を決めてください。
赤い字の部分はカテゴリの英字名です。
これは必要ない人もいあるかと思うので説明は省きます。
緑の字の部分が表示されるカテゴリ名となります。
ディレクトリ名は、MovableType(ムーバブルタイプ) 3.3からは、こちらのカテゴリのディレクトリ名に任意の名前を付けるで紹介してるようなことやプラグインを使用しなくても、任意に作成することができるようになりました。
では、上記カテゴリ構成を任意の順番に並べ替えて、かつ、日本語名だけを表示させたカテゴリ一覧を以下に記します。
これを実現するには、Regexプラグインを使用します。
Regexプラグインは指定された文字列を変更後の文字列に変換してくれるプラグインです。
変換前文字列と変換後文字列に正規表現を使用することが可能なんです。
このプラグイン1つインストールすることで、カテゴリを任意の順番に並べ替えつつ、日本語名だけを表示させたりすることができます。
▼Regexプラグインの入手はこちらから▼
http://www.sixapart.jp/movabletype/plugins/regex.html
プラグインのインストール
上記URLからプラグインの圧縮ファイルをダウンロードして、適当なフォルダに展開します。
そして、各ファイルを以下の場所にアップロードしてください。
regex.pl:mt/plugins/ ディレクトリの中にアップロードします。regex.pm:postproc.pm:mt/extlib/ディレクトリの中にbradchoate/ディレクトリを作成して、その中にアップロードします。
Regexプラグインの使い方
Regexプラグインは以下のようなフォーマットで使います。
s|変換前文字列|変換後文字列|
たとえば、先ほど記したカテゴリ一覧の"ムーバブルタイプ"という文字列を、MTに変換する場合には、以下のような記述になります。
s|ムーバブルタイプ|MT|
以下は、先ほどRegexプラグインを使用したカテゴリ一覧のコードになります。
<MTTopLevelCategories><MTSubCatIsFirst><ul></MTSubCatIsFirst><MTIfNonZero tag="MTCategoryCount"><li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><$MTCategoryLabel decode_html="1" remove_html="1" regex="s|^[0-9].*\( ||" regex="s| \)||"$></a><MTElse><li><$MTCategoryLabel decode_html="1" remove_html="1" regex="s|^[0-9].*\( ||" regex="s| \)||"$></MTElse></MTIfNonZero><MTSubCatsRecurse></li><MTSubCatIsLast></ul></MTSubCatIsLast></MTTopLevelCategories>
通常のカテゴリ一覧のコードに、regexという属性を追加することで、<$MTCategoryLabel>タグの文字列を変換する…というように使います。
青い字の部分がそれにあたります。
上記コードでは正規表現を2回使って、日本語のカテゴリ名のみ残すよう指示しています。
以下に青い字の部分を抜粋した正規表現を記します。
先頭の数字から"("までを削除する正規表現regex="s|^[0-9].*\( ||"" )"を削除する正規表現regex="s| \)||"
わたしもまだ正規表現というものを覚えたばっかりなので慣れてないのですが、慣れるといろんなふうに文字列を加工できそうですよ。
正規表現については、検索エンジンなどで調べるとたくさんHITしますので、覚えたてのわたしが説明するより分かりやすいかと…ごめんなさい。
わたしも上手に説明ができるほどまだ詳しくないので (; ̄∇ ̄A
正規表現ってPHPやCGIでも使われるので、覚えておくと便利かも、です。
Trackback Pings(0)
No trackbacks found.




なるほど、正規表現をそこに使いましたか。
MT3.3になって、カテゴリーの出力ファイル名が設定できるようになったんで、ここら辺も頭ひねれそうですね。
[a-zA-Z]+でカテゴリーの英字部分だけ出力したりとか・・・
MTRegexは、最初の方でRegexDefineしとくと、同じ処理が繰り返される時便利です。置換文字列は定義しといた方が楽ですよ。
>>1 oscar さん
こんにちわ^^
> MT3.3になって、カテゴリーの出力ファイル名が設定できるようになったんで、ここら辺も頭ひねれそうですね。
ですね♪
今までのプラグインと違って、カテゴリに依存したものではないので、いろんなシーンで使えそうですよね( ̄∇ ̄)b
それにはまず正規表現になれないと…(つω-`。)
> MTRegexは、最初の方でRegexDefineしとくと、同じ処理が繰り返される時便利です。置換文字列は定義しといた方が楽ですよ。
ありがとうございます。
使っててわたしもそうかんじました(; ̄∇ ̄A
カテゴリを任意の順番にするのは
前からやろうと思っててなんか面倒で(^_^;)
でもやっぱりやろうかという気になってきましたw
行き詰まったらご指導よろしくお願いしますm(_ _"m)ペコリ
>>3 ぷーこ さん
こんにちわ^^
> 行き詰まったらご指導よろしくお願いしますm(_ _"m)ペコリ
もちろんです(●´∀`●)