Movable Type用ShortCodeプラグイン・その11(複雑なショートコードのプラグイン)

ここまでのShortCodeプラグインの解説では、config.yamlファイルだけでショートコードのプラグインを作る方法を解説しました。
ただ、複雑な処理を行うショートコードだと、config.yamlファイルだけでは処理を記述しきれません。
その場合は、Perlでショートコードの処理を行うようにします。

第10回にlinkショートコードを改良する例を紹介しました。
ショートコードの処理をPerlで行う簡単な例として、このプラグインを書き換える方法を紹介します。

1.config.yamlファイルの書き換え

まず、config.yamlファイルを書き換えて、ショートコードの処理を行うPerlのサブルーチン名を指定します。

前日のプラグインでは、ショートコードの処理は、config.yamlファイルの「template:」の行で指定していました。
この「template:」の行の代わりに、以下のような行を入れます。

handler: $プラグインのID::モジュール名::サブルーチン名

「プラグインのID」には、config.yamlファイルの先頭の方の「id:」行で指定した値を入れます。
また、「モジュール名」と「サブルーチン名」で、ショートコードの処理を行うサブルーチンを指定します。

例えば、前日のlinkショートコードのプラグインで、ショートコードの処理を、「LinkShortCode::Plugin」モジュールの「link_short_code」サブルーチンで行うとします。
また、このプラグインのIDは、「LinkShortCode」でした(前日の記事のconfig.yamlファイルを参照)。
この場合は、config.yamlファイルに以下のような行を入れます。

handler: $LinkShortCode::LinkShortCode::Plugin::link_short_code

2.ショートコードの処理を行うサブルーチン

次に、ショートコードの処理を行うサブルーチンを作ります。
サブルーチンのパターンは、以下のようになります。

sub サブルーチン名 {
    my ($ctx, $args) = @_;

    # パラメータ群を得る
    my $params = $ctx->stash('__sc_params');
    # ショートコードのブロック内のテキストを得る
    my $content = $ctx->stash('__sc_content');
    テキストとパラメータから出力を求める処理
    return 出力値
}

ショートコードにはパラメータを指定することができます。
それらのパラメータ群は、「$ctx->stash('__sc_params')」にハッシュリファレンスとして格納されます(「sc_params」の前には、アンダースコアを2つ書きます)。
上のリストでは、そのハッシュリファレンスを、変数$paramsに代入していますので、「$params->{パラメータ名}」で、そのパラメータの値を得ることができます。

また、ショートコードのブロック内のテキストは、「$ctx->stash('__sc_content')」に格納されます。
上のリストでは、テキストを変数$contentに代入しています。

テキストとパラメータを得たら、それらの値を処理して、ショートコードの出力値を生成します。
そして、その値をサブルーチンの戻り値として返します。

3.サブルーチンの例

ここまでの話に基づいて、linkショートコードの処理を行うモジュールを作ると、以下のようになります。

package LinkShortCode::Plugin;

sub link_short_code {
    my ($ctx, $args) = @_;

    my $params = $ctx->stash('__sc_params');
    my $content = $ctx->stash('__sc_content');

    my $href = $params->{href};
    my $out = '<a href="' . $href . '">' . $content . '</a>';
    return $out;
}

1;

6行目と7行目で、パラメータ群とテキストを、それぞれ変数$params/$contentに代入します。
また、9行目でhrefパラメータの値を変数$hrefに代入します。
そして、10行目で、$hrefと$contentの値を利用して出力を求め、その値を変数$outに代入します。
最後に、11行目で$outの値を戻り値として返します。

4.サンプルファイル

今日の記事で紹介したプラグインは、以下からダウンロードすることができます。

LinkShortCode_1_20.zip

ダウンロードしたファイルを回答すると、「LinkShortCode」というフォルダができます。
このフォルダを、Movable Typeの「plugins」ディレクトリの中にアップロードすると、プラグインを実際に動作させることができます。