mail2weblog (1.3.9) | 2013-08-09 13:18 |
書式プラグインは、ブログ記事の書式を拡張するためのプラグインです。
書式プラグインは、ブログへの記事投稿時のブログ記事本文上の {{example}} もしくは {{example(param)}} を生成した文字列で置き換えます。
本文の書き方に応じて呼び出される処理が分かれます。
1つは単独行処理で、以下のように本文を記述した場合に起動する処理を言います。
メール本文の1行目。上下ともに1行空いて example 書式プラグインが単独行で書かれている場合 {{example}} メール本文の5行目
この場合、plugin_preset および plugin_contents メソッドが呼び出されます。
もう1つはインライン処理で、以下のように本文を記述した場合に起動する処理を言います。
1行の文章中に {{example}} のように書式プラグインを書いた場合
この場合、plugin_preset_inline および plugin_contents_inline メソッドが呼び出されます。
4つあるメソッドの引数はいずれも同じ意味合いを持っています。
param は {{example(param)}} の () の中の文字列です。param は単独行の文字列であることもあれば、複数行の文字列である場合もあります。
書式プラグインは param を自由に解釈できますが、標準的な書式及びその書式に従った解析メソッド(FormatPluginUtils#get_format_plugin_parameter)の利用を推奨します。
標準的な書式は以下の通りです。
{{書式プラグイン名(パラメータ1/パラメータ2/.../オプション名1@オプション値1/オプション名2@オプション値2/.../!無効対象オプション名)}}
{{書式プラグイン名(パラメータ1/パラメータ2/.../オプション名1@オプション値1/オプション名2@オプション値2/.../!無効対象オプション名 コンテンツ1行目 コンテンツ2行目 コンテンツ3行目 ... )}}
まずは以下のように書式プラグインに FormatPluginUtils をミックスインしてください。
require 'plugin/format/lib/format_plugin_utils' class Example_FormatPlugin include FormatPluginUtils # ... end
こうすることで書式に従った解析を行う get_format_plugin_parameter メソッドを利用できるようになります。
get_format_plugin_parameter メソッドの引数は以下の通りです。
順番 | 名前 | 概要 | デフォルト値 |
1 | param | param をそのまま指定してください。 | - |
2 | vars | vars をそのまま指定してください | - |
3 | required_param_count | 必須パラメータ数を指定して下さい。必須パラメータ数以降のパラメータをオプションと見なします。もしも param に含まれるパラメータが数に満たなかった場合は、エラーと見なします。 | 0 |
4 | option_alias | オプション名の省略形と正式名の対応を Hash で指定します。 | {} |
5 | option_defaults | オプションにデフォルト値がある場合は、オプション名をキー/デフォルト値を値とした Hash を指定してください。オプション名には省略名と正式名の両方が利用できます。推奨は正式名です。 | {} |
get_format_plugin_parameter メソッドの戻り値は、以下の値を持つ Array です。
順番 | 名前 | 概要 |
1 | params | パラメータの値を Array で返します。 |
2 | option | オプションの値を Hash で返します。キーは正式名です。 |
3 | content | 単一行の場合は nil を複数行の場合は、コンテンツの内容を文字列で返します。コンテンツには改行も含みます。 |
get_format_plugin_parameter メソッドを利用することで option に param の内容だけではなく、以下の内容も反映されます。
vars は、ブログID(:blogid)や投稿ID(:postid)やなどの情報を持った Hash です。
vars が持つ Hash の主なキーと値の対応を以下に示します。
キー | 値 | plugin_preset 系での利用可否 | plugin_contents 系での利用可否 |
:postid | ブログ上で投稿記事を一意に識別する投稿ID | ○ | ○ |
:encoding | ブログから情報を取得する場合のエンコーディング(詳細は 文字コードを参照のこと) | ○ | ○ |
:attachment_urls | 添付ファイルの URL を格納したハッシュ(添付ファイルの格納順に 1 から 2, 3, 4 ... というインデックスで URL 文字列が格納されている) | - | ○ |
:thumbnail_urls | 添付ファイル(画像)のサムネイル URL を格納したハッシュ(添付ファイルの格納順に 1 から 2, 3, 4 ... というインデックスで URL 文字列が格納されている) | - | ○ |
:related_attachment_urls | 関連ファイルの URL を格納したハッシュ(関連ファイルのIDをキーとし、URL 文字列が格納されている) | - | ○ |
:related_thumbnail_urls | 関連ファイル(画像)のサムネイル URL を格納したハッシュ(関連ファイルのIDをキーとし、URL 文字列が格納されている) | - | ○ |
plugin_preset 系メソッドで返した Hash のキー | plugin_preset 系メソッドで返した Hash の値 | △ | ○ |
ブログヘッダーのキー(省略形および正式名) | ブログヘッダーのキーに対応する値 | ○ | ○ |
ただし、plugin_preset 系と plugin_contents 系では呼び出しのタイミングによって利用可能/不可能な値があります。
参考までにシステムの動作の概要を以下に示します。
上記順序でシステムが動作するために利用できる vars の内容が異なります。
plugin_preset 系メソッドはブログ本文の上から順番に呼び出されるため、下にある plugin_preset 系メソッドはそれよりも上にある plugin_preset 系メソッドが設定した内容を参照できます。利用可否を△と書いた理由は、順番に応じて参照できる情報が変わることを表しています。
plugin_preset 系メソッドで返した Hash については、後に説明する plugin_preset 系メソッドの情報を参照してください。
ブログヘッダーの情報とは、例えば以下のような情報です。
省略名 | 正式名 | 概要 |
"tit" | "title" | ブログ記事タイトル(指定していない場合は nil) |
"dat" | "dateChanged" | ブログ記事投稿日時(指定していない場合は nil) |
"cats" | "categories" | カテゴリ(指定していない場合は nil) |
"keys" | "mt_keywords" | キーワード(指定していない場合は nil) |
"tags" | "mt_tags" | タグ(指定していない場合は nil) |
- | 他、ヘッダーのキー | 対応する値(指定していない場合は nil) |
上記の表に記載のあるブログヘッダーは標準仕様として定めたものです。参照の際は必ず太字の省略名のキーを利用してください。
plugin_contents 系メソッドに先立って呼び出される事前処理用メソッドです。
本メソッドは以下の目的で利用します。
本メソッドを定義する場合は、必ず Hash を返して下さい。
返した Hash は vars にマージされ、他の書式プラグインから参照できるようになります。
ブログ本文に埋め込まれた書式プラグインの記述をどのように変換するかを具体的に支持するメソッドです。
メソッドの戻り値が、任意の HTML 文字列となるように定義してください。
書式プラグインを呼び出すきかっけとなった、ブログ記事本文上の {{example}} もしくは {{example(param)}} が戻り値の文字列によって置き換えられて、ブログ本文となります。
書式プラグインの共通設定とは conf/02_user/plugin.rb の以下の設定のことです。
M2W_FORMAT_PLUGIN_CONF = { # 書式プラグインの書式を設定します。 'COMMON' => { 'key1' => '値1', 'key2' => '値2', 'key3' => '値3', }, }
この設定値を参照することで、動作が変わるよう書式プラグインを実装できます。
まずは以下のように書式プラグインに FormatPluginUtils をミックスインしてください。
require 'plugin/format/lib/format_plugin_utils' class Example_FormatPlugin include FormatPluginUtils # ... end
こうすることで書式プラグインの共通設定を取得する format_plugin_common_conf メソッドを利用できるようになります。
format_plugin_common_conf メソッドの引数は以下の通りです。
順番 | 名前 | 概要 | デフォルト値 |
1 | vars | vars をそのまま指定してください。 | - |
2 | key | 取得する設定のキーを指定してください。 | - |
指定したキーに対する値が返ってきます。
- # coding: UTF-8
- require 'plugin/format/lib/format_plugin_warning'
- #=添付画像を貼り付ける書式プラグイン
- #
- # 最初の著者:: トゥイー
- # リポジトリ情報:: $Id: img.rb 194 2011-08-11 13:36:56Z toy_dev $
- # 著作権:: Copyright (C) Ownway.info, 2011. All rights reserved.
- # ライセンス:: CPL(Common Public Licence)
- class Img_FormatPlugin
- def plugin_contents(param, vars)
- src_url = get_url(param, vars)
- if src_url != nil then
- return %Q!<div><img src="#{src_url}" /></div>!
- else
- raise FormatPluginWarning.new(
- "画像番号指定ミス(画像番号 = #{param})",
- "画像番号に対応する添付ファイルがありませんでした(画像番号 = #{param})。")
- end
- end
- def plugin_contents_inline(param, vars)
- src_url = get_url(param, vars)
- if src_url != nil then
- return %Q!<img src="#{src_url}" />!
- else
- raise FormatPluginWarning.new(
- "画像番号指定ミス(画像番号 = #{param})",
- "画像番号に対応する添付ファイルがありませんでした(画像番号 = #{param})。")
- end
- end
- def get_url(param, vars)
- attachment_urls = vars[:attachment_urls]
- if attachment_urls != nil then
- if param == nil then
- param = "1"
- end
- if param =~ /^([0-9]*)$/ then
- index = param.to_i
- if attachment_urls.has_key?(index) then
- return attachment_urls[index]
- end
- else
- return nil
- end
- end
- end
- end