Perlで書くはじめてのMTプラグイン - エントリー同士の関連付け

公開

mt-ftsearch.cgiを使って全文検索をする記事が1記事で完結しなかったことから、Movable Typeで記事の関連付けができないかなと思い始めました。色々探っているうちにたどり付いたのが「MTAppjQuery v1.7.0 リリース - $.MTAppListing() を追加ほか」の記事。MTAppListingの動画を見ると、まさに自分のやりたかったことが実現されていました。

「これはいい!」と思ったのですが、折角やるなら記事同士を相互リンクにしたいという欲望。PSGI環境でmt-ftsearch.cgiを使えるようにしてから、MTプラグイン作成に少し目覚めたので、Perlは全然分からないながらも作り始めました。

試行錯誤をすること約5日(オフタイムにやっていたのでそれほどの時間ではありません)、Perlで書いたはじめてのMTプラグイン「SetRelatingEntry」ができあがりました。

仕様

記事を保存した際にSetRelatingEntryが動作します。編集した記事(記事Aとします)の関連記事フィールドに格納された値(記事ID)を元に対象の記事(記事Bとします)を呼び出し、記事Aの記事IDを記事Bの関連記事フィールドに格納して再構築します。

また、記事Aの関連記事フィールドから記事BのIDが削除された場合は、記事Bの関連記事フィールドから記事AのIDを削除して再構築します。

SetRelatingEntryプラグインを使うかどうかは、ブログ毎にプラグインの設定画面で設定できます。(といっても他のブログ内の記事IDを指定すれば、たぶん動いてしまうオチはありますが。)
プラグインの設定画面

プラグインを作ってみての感想

Perlが分からなくても、PHPやJavaScript、あとオブジェクト指向がある程度分かっていれば、

などの情報を見ながら完成までたどり着くことができるな、と感じました。2009年に発売された「Movable Typeプラグイン開発入門」も中古で買い直し、パラパラと見ました。「MTのプラグインを書きながらPerlの文法も覚える」というアプローチも良いかもしれませんね。

プラグインの設定画面も、ドキュメントを見てMTML(ほぼHTML)を少し書いただけでで簡単に作ることができたのは驚きでした。

たぶん良いコードにはなっていないので、また改めてリファクタリングしたいと考えています。

ライセンスとか

なにせ初めてPerlで書いたプラグインなので、バグがあるかもしれません。それでも使ってみようと思われる方はお使いください。念のためデータベースのバックアップをお忘れなく。

リファクタリングした後にライセンスとか考えようと思います。

(余談)MTAppjQueryについて

MTAppjQueryは色々な機能があって便利ですね。ドキュメントを読みたかったので購入しました!

使いこなそうと思うと、jQueryやJavaScriptの知識...コールバックの使い方などを知っていた方がより良いかなと感じました。例えば、MTAppListingに表示する記事リストの日付をyyyy年m月d日にする時などに。Data APIから記事リストを読み込むと、"date": "2015-02-11T08:51:23\u002b09:00"のように収まっているんですよね。
MTAppListingで記事リストを読み込んだ様子