ブログ記事のキーワード欄を「金額」として使っているとき、単位付き・3桁区切りで一覧画面に表示する方法

長いタイトルになりましたが、言いたいことはタイトルの通りです。僕は何度かあるんですけど、ブログ記事のキーワード欄を「金額」として使うことってありませんか?

MT5.1 では、Listing Framework のおかげで、キーワード欄をブログ記事の一覧画面に表示させるのはすごく簡単になりました。しかし、普通にやって表示されるのは数字のみですよね。今日は、もう一歩踏み込んで、この数字に「円」という単位を付けて、さらに3桁ごとにカンマで区切って表示してみたいと思います。

その前に一つ注意点。キーワード欄を金額として使ったとしても、一覧画面で文字列として認識されます。つまり、並べ替えをしても、

  • 15000
  • 1980
  • 200

のように正しく数値順にはなりません。その必要がある場合は、プラグインを使った別の方法を検討した方が良いでしょう。

基本となるconfig.yamlをインストールする

まずは、今回のリスティング・フレームワークの基本となるプラグインを作成します。今回のプラグインは「KeywordsIsMoney」という名前にします。

Movable Type のインストールディレクトリ(以下「mt」とします)直下の plugins ディレクトリに KeywordsIsMoney というディレクトリを作成し、その中に以下の内容を記述したファイルを config.yaml という名前で保存します。このとき、今回のサンプルのように、ファイルに直接日本語を書く場合は、UTF-8 で保存しないと文字化けしてしまうので注意してください。

  • mt
    • plugins
      • KeywordsIsMoney
        • config.yaml
id: KeywordsIsMoney
list_properties:
    entry:
        keywords:
            auto: 1
            label: 金額
            order: 250


表示オプションで確認

ここまでがうまくいくと、「ブログ記事の管理」画面で表示オプションをクリックすると「金額」というチェックボックスが追加されています。これにチェックを入れれば、一覧に「金額」が追加されるはずです。

keymoney-1

ここまでで、準備完了です。

単位を付けて、3桁ごとにカンマで区切る

現在の状態だと、上の画像のように、金額欄には単に数字が入っているだけです。これだと少し優しさに欠けますよね。

そこで、本題である単位付けと3桁区切りを実装します。先ほどの config.yaml の下に html というのを追加します。内容は以下の通りです。

id: KeywordsIsMoney
list_properties:
    entry:
        keywords:
            auto: 1
            label: 金額
            order: 250
            html: >
                sub {
                    my ($prop, $obj, $app) = @_;
                    my $out = $obj->keywords;
                    return '' if ($out == '');
                    while($out =~ s/(.*\d)(\d\d\d)/$1,$2/){};
                    $out = '<span style="display: block; padding-right: 2em; text-align: right;">' . $out . ' 円</span>';
                    return $out;
                }

このように html にサブルーチンを設定して値を返すと、その値が一覧画面に表示されます。3桁区切りにカンマを付ける部分は「[perl] 3桁ごとにカンマを付加する」を参考にさせていただきました。ありがとうございます。

keymoney-2

これで完成です。以上です。

  • このエントリーをはてなブックマークに追加
Just a second...