2017年02月10日
MTCommentBody タグの autolink モディファイアを、他の MT タグでも利用可能にする AutolinkModifier プラグイン
MTCommentBody
タグには、コメント内に記述されている URL を自動的にリンクに変換してくれる、便利な autolink
モディファイアというものがあります。
ただ、この autolink
モディファイアは残念ながらグローバル・モディファイアではないので、他の MT タグでは利用できません。
そこで、今回はその autolink
モディファイアの機能をグローバル・モディファイアにして、他の MT タグでも使っちゃおうという記事になります。
_autolink モディファイアを利用してみる
早速ですが、AutolinkModifier というグローバル・モディファイアプラグインを作成しました。
こちらのプラグインを設置すると _autolink
モディファイアが利用出来るようになります。
(モディファイア名が重複しない様にアンダースコアを付与しています。)
下記の様に記述したテンプレートを再構築すると、後述の通り URL がリンクに置き換わります。
サンプル MTML
_autolink
モディファイアを利用するには、値に '1' を設定してください。
<MTSetVarBlock name="text">
<p>PowerCMS - カスタマイズする CMS。 http://www.powercms.jp</p>
<p><a href="http://www.powercms.jp">PowerCMS - カスタマイズする CMS。</a></p>
</MTSetVarBlock>
<$MTVar name="text" _autolink="1"$>
出力される HTML
<p>PowerCMS - カスタマイズする CMS。 <a href="http://www.powercms.jp">http://www.powercms.jp</a></p>
<p><a href="http://www.powercms.jp">PowerCMS - カスタマイズする CMS。</a></p>
- ※ 上記では説明の為にわざわざ MT 変数を定義して利用していますが、もちろん
MTEntryBody
等の MT タグにも利用できます。 - ※ 元からある
<a href="http://www.powercms.jp">
は置き換わらないのもポイントの一つです。
_autolink
モディファイアが利用出来ると嬉しいケース
今回の元ネタになっている MTCommentBody
タグの様に、『HTML の入力は想定していないが、URL が記載される可能性がある』フィールドに対して設定すると便利だと思います。
例えばですが、PowerCMS のテンプートを実装する際には、実際に運用するユーザの負担を減らす為にカスタムフィールドを作成すると思います。
その際に作成するカスタムフィールドの種類には、PowerCMS の機能である『カスタムフィールド Pro』を利用する事で選択可能になる『エディタ付きテキスト』もありますが、作成する目的(運用するユーザのリテラシーのレベルに合わせる場合等)によってはあえてプレーンのテキストフィールドを選択する方が良い場面もあると思います。
『プレーンテキストでも URL はリンクにしたい』。。。はい!そこで今回の _autolink
モディファイアの出番です!
MTCommentBody
タグの autolink
モディファイアがグローバル・モディファイアではない理由(を想像する)
そもそも MTCommentBody
タグではデフォルトで sanitize
モディファイアが有効になっています。
ですので、例えばコメント投稿者が <a>
タグを入力しても、そのタグは除去されてリンクを表示することが出来ない仕様になっています(明示的に sanitize
モディファイアを設定することや、環境変数 GlobalSanitizeSpec
を設定することで変更することは可能です)。
その為、デフォルトで sanitize
モディファイアが有効になっていない他の MT タグでは想定外の HTML が出力される可能性がある為、MTCommentBody
タグ固有のモディファイアになっているのかもしれません。
今回の AutolinkModifier プラグインを利用される時は、前述の理由も頭の片隅に置きながらご利用いただければと思います。
コメントを投稿する