Movable TypeでGist記法のグローバルフィルター
Gist記法とは何ぞ、という人もいるかとおもいますが、Gist使いなかた向けにということで、Gist記法のような記述でソースコードを埋め込むようにできるグローバルフィルターを作ってみました。
DOWNLOAD
展開後のplugins以下の「GistSource」フォルダをpluginsディレクトリにアップロードします。
使い方
<mt:SetVarBlock name="gist"> [gist: 1] </mt:SetVarBlock> <mt:GetVar name="gist" GistSource="1" />
GistSource="1"
を使用したい箇所に記述しておきます。
記法について
[gist: gist番号]
のみです。gist 番号は、Gistの各ページにある、gist: XXXXXXXXのような形式のXXXの数字の部分です。数字とコロン(半角)との間のスペース(半角)はありでもなしでも変換します。
上記の記述は展開により、
<script src="https://gist.github.com/xxxxxxxx.js"></script>
に置き換えられます。
設定について
ブログ単位で設定することができます。設定できる項目は以下です。チェックの入っているものが使用可能の状態です。
- Gist記法を使用するかしないか
- デフォルト:使用する (チェック)
- type属性(type="text/javascript")をつけるかつけないか
- デフォルト:つけない(チェックなし)
記法の使用しない設定ですが、モディファイアを指定している状態であっても、展開されないという動作です。テンプレートのテストなどで一時的に使用しないような場合などモディファイアを修正せずに行なうというときに。通常は記法を使用しない場合は、システムレベルで無効とすればいいです。
使用例
個人的にGistを利用していないため、他者のコードを表示させてもらっています。
[gist: 1] [gist: 1630307][を数値文字参照で記述すれば展開を回避できます。
[gist: 1] [gist: 1]
Twitterユーザー名に自動リンクして出力するグローバルフィルターを提供するプラグイン
Twitterユーザー名は自動リンクにしてほしいかも、ということでそういったフィルターをかけられるプラグインを作ってみました。
参考にしましたのは、以下のエントリからです。
プラグインにしてみたら面白そうにおもえたので作成してみることにしました。
どんな実装にするか?
- Markdown や改行を変換などの記法に関係なくモディファイア指定した箇所を反映するようにする
- ブログ単位でプラグインの設定画面を使って詳細設定可能にする
- Link target をなしにするか _blank をつけるか
- class 名(twitter-anywhere-user)をつけるかつけないか
- テキスト中に自動リンクさせたくないときの方法をサポートする
ダウンロード
動作確認は、MTOS 5.14-ja を使用しました。
- markdiarycom / TwUserLinky / -- Bitbucket
- https://bitbucket.org/markdiarycom/twuserlinky/get/default.zip
簡単な使い方
展開後のフォルダをpluginsディレクトリにアップロードします
システムのプラグイン一覧に、TwUserLinky が表示されていれば使える状態になっています
反映させたい箇所に、
TwUserLink="1"
というモディファイアをつけます。
例: MT:EntryBody など
<$mt:EntryBody TwUserLink="1"$>
使用とエスケープの方法
EntryBodyにこのモディファイアを適用した場合は、ブログエントリ内に@ユーザー名といったように記述するだけです。
.@bizという記述は@bizという形での出力となります。
なお、リンクURIはスキーマ省略した//twitter.com/をベースとして出力します。
片っ端から自動変換されると、本来変換されるべきでないところにまでTwitterへのリンクがついてしまいます。エスケープしたいときに、@の前にピリオド(.)かあるいはバックスラッシュ(\) を置いて記述すれば、そこはリンクさせないようにしてあります。
設定について
設定は各ブログのプラグイン設定よりおこなうことができます。
必要なものに対して、チェックをいれます。
今のところ設定可能なのは、以下の2点です。
- リンクを新規ウィンドウで開くか (デフォルトは別ウィンドウで開かない)
- リンクにclass (class="twitter-anywhere-user")をつけるか (デフォルトはclassをつける)
リッチテキストモードでの注意点
@の次にspan、code 等インライン要素で囲んである場合、リッチテキスト側に.\(コロン、バックスラッシュ)でエスケープしても、正しく解釈しません。
HTML表示のほうにして、タグの内部(Twitterユーザーのテキストの@の前)でエスケープするようにしてください。
アップデート
2013/07/10 分かち書き(単語の前後に半角スペースを挿入)で出力できるオプションを追加しました。プラグイン設定をラジオボタンに変更しました。
2015/03/02 リッチテキストモードでの注意点を書きました。
覚書:ダイナミックパブリッシング用関数で、変数渡ししないでプラグインの設定値の取得はどうするか
Movable Typeプラグインでダイナミック対応のPHPファイルを作るとき、プラグイン設定した値を得る方法がわからないことがあったのでメモしておきます。
通常は、以下のような形でプラグインで設定した値(Config-value 以下、単に「設定値」と表記します)をゲットします。ブログ単位の設定値
function smarty_function_myplugin( $args, &$ctx ) { $mt = MT::get_instance(); $blog_id = 'blog:' . $ctx->stash('blog_id'); $config = $mt->db()->fetch_plugin_data('MyPlugin', 'configuration:' . $blog_id); $cfgval_blog = $config['config_value']; return $cfgval_blog; }
- 参照:プラグインの設定方法 · movabletype/Documentation Wiki · GitHub
これを、第3引数で$ctx を渡そうとしたら、$ctxを直接受け取れないかんじだったので躓いていました。
なお、動作確認したときの環境はMTOS 5.14 + PHP5.2系およびPHP5.3系にて
設定値は、MT::get_instance();としたあとで、 contextを変数へ代入。
function smarty_function_myplugin( $text, $args ) { $mt = MT::get_instance(); $ctx =& $mt->context(); $blog_id = 'blog:' . $ctx->stash('blog_id'); $config = $mt->db()->fetch_plugin_data('MyPlugin', 'configuration:' . $blog_id); $cfgval_blog = $config['config_value']; return $cfgval_blog; }