Movable Type 4.2x で作っている「写真」ブログのところでは、アルバムという括りは MT のカテゴリで整頓していて、アルバム一覧のページではつまり、カテゴリの一覧を並べているのだけれども、じつは並び順がいい加減だった。気にはかけていたのだけれども、その時は数も少なかったし、調べるのも面倒くさがって、ほったらかしていた。でも最近見直したらば、数も増えて来ていよいよだらしがないので、直したいと考えた。
更新日順に直したい。
そこで、ブロックタグ MTSubCategories で得たカテゴリのリストを、ソートするためのモディファイア(アトリビュート?)が、 sort_by って名前できっとあるだろうと気楽に考えてリファレンスを見てみたら──なかった。また MT にやられたと思うだけで、はてと困った。
しかし救う神あり、よく見れば sort_method というそれでソートできる。しかしなんでこのタグだけ「メソッド」なんだろうと気がつくが早いか、メソッドって何だよとまた立ち往生した。それにしても、なんていい加減な説明だろう。リファレンスから該当の説明を引用したら、すなわちそれが全文だ:
sort_method="sub_foo" Perl のメソッド名を使って並び替えます。
MT は Perl ハッカーたちの玩具に過ぎないのだなと毒づくのは容易なことだ。コンテンツづくりの前に、 MT 環境づくりに頭を悩ませなければならないだなんて。──このマニュアルは、 Perl を知らなければ、 MT を使えないと言っているようなものだ。
さてところが Perl を知っていても、解らない。解るんだろうか、このひと言で。 Perl のメソッド名が何を指しているのかも、じぶんには解らない。 MT オブジェクトの、メソッド? そう連想するのがまず順序かもしれない。
こんなときに、ソースがあるのだからそれを見ろと言われるのは癪だし、それを開いて見る気も起こらないので、先ず Google に訊いてみると、 MT 関係の記事がいつもそうであるように、コピペのような記事ばかりが並んだ。ひとつふたつ、つまみ読みしてみると、どうやら、新しくパッケージを定義して、そこに「メソッド」(関数)を定義し、それを sort_method に指示しているようだ。これはえらい手間に違いない。
ほかにやり方はないものかと、しかし探すよりまず試してみようと思ったのが、ソート・メソッドを直接書いてしまうという乱暴なやりかただ。こんなふうに:
<MTSubCategories
top="1"
sort_method="{ $b->modified_on cmp $a->modified_on }"
>
これで確認してみたら、新しいのから順に並んでしまったので、なんとも驚いた。半ば呆れて。 Perl のコードそのものだ。でも用事は済んだので、手間要らずで助かったのだった。
ドキュメントにパッチするならどうしたらよいだろう。解った後から見直せば、言葉少なな中にも意味は含まれていて、誤りではないかもしれない。じぶんが解釈したのは「記述したそのままがソート関数として用いられます」という感じだろうか。
いやいや、ドキュメントを直すよりも、そもそも素直に sort_by が指定できるように実装したらいいのだろう。 $a, $b は MT::Category ( MT::Object )のオブジェトのようだから(未確認)、しろうと考えではすぐに出来そうなのに、なぜ識者は黙っているのだろうと思うけれども、じつは深い理由がそこにはあるのかもしれない。

コメントする