エントリ内に画像を表示させるとき,そのサイズを指定するのが面倒くさい *1ので,自動で指定するプラグインを作ってみました.ついでに,少し付加機能をつけて.
実は,作っている途中に,MT Plugin Directoryで似たような動作をする EmbedImage というプラグインを見つけたのですが,私が考えているものと少し方向性が違うみたいだし,作り始めてしまったので最後まで作ってみました *2.EmbedImage との主な違いは以下の通り.
- 画像の拡縮は行わない.
- 属性値の指定の仕方により,リンク有/無の表示が出来る.
大した違いはありませんが,要するに,私が使いやすいように最適化されているだけです.(^_^; 特定のタグを使って画像にリンクを張れば,そのタグを使うか使わないかによって,サムネイルを表示させたいのかどうかは分かるわけで,にたようなファイル名を2度入れる *3のは面倒くさい.また,サムネイルの表示サイズは画像自体をみれば分かるわけで,毎度毎度人手で入れるのは面倒くさい.だから,これらを自動かしてしまおう,ってわけで.
今回も,Macros と共に使うことを前提としています.例えば,テンプレートで以下のように定義して使います *4.
<MTMacroDefine name="fig" tag="fig">
<MTFigure src="[MTMacroAttr name='src']"
href="[MTMacroAttr name='href']"
alt="[MTMacroAttr name='alt']"
suffix="_tn"
base="[MTBlogArchiveURL]data/"
localbase="[MTBlogSitePath]data/"
documentroot="/var/www">
<div class="figure left">
<MTIfFigureLink>
<a href="<$MTFigureHref$>">
</MTIfFigureLink>
<img src="<$MTFigureSrc$>"
alt="<$MTFigureAlt$>"
width="<$MTFigureWidth$>"
height="<$MTFigureHeight$>" />
<MTIfFigureLink>
</a>
</MTIfFigureLink>
<br /><$MTFigureAlt$>
<MTIfFigureLinkHasSize>
(<MTFigureLinkSize>)
</MTIfFigureLinkHasSize>
</div>
</MTFigure>
</MTMacroDefine>
上記のように定義した場合は,次のように使います.
<fig
href="200309/fountain.jpg"
alt="大噴水" />
このとき,左のようにサムネイル画像である data/200309/fountain_tn.jpg が表示され,さらに data/200309/fountain.jpg へのリンクが張られます.また,ソースを見れば,サムネイル画像のサイズが指定されていることが分かります.
大体は上記の例で分かると思いますが,一部特殊な動作をするものがありますので,以下に説明します.
- MTFigure
- コンテナタグです.以下の属性値を持ちます.これらの属性値は,必須となるいくつかの組合わせがあります.
- src 属性
- 表示する画像を指定します.href 属性または suffix 属性が指定されていない場合は必須です.これは,ローカルの画像ファイルでなければなりません.
- href 属性
- 画像から張るリンクを指定します.src 属性が指定されていない場合は必須であり,ローカルのファイルでなければなりません.
- suffix 属性
- href 属性で指定される画像に対するサムネイル画像の接尾辞を指定します.src 属性が指定されていない場合は必須です.src 属性が指定されていない場合は,href 属性値の拡張子の前(拡張子がない場合は最後)に suffix 属性を追加したものが src 属性値として扱われます.
- base 属性
- URI での接頭辞を指定します.src 属性や href 属性が相対パスで指定されている場合 *5は,それぞれの前にこれが追加されているものとして扱われます.
- localbase 属性
- ローカルでの接頭辞を指定します.その他の扱いは,base 属性と同じです.
- documentroot 属性
- http://example.com/ と等しいローカルディレクトリの絶対パスです.src 属性や href 属性が絶対パス指定の場合は,それぞれの前にこれが追加されているものとして扱われます.
- MTIfFigureLink
- 条件タグであり,MTFigure タグ で href 属性が指定されている場合は真となります.
- MTIfFigureLinkHasSize
- 条件タグであり,MTFigure タグで src 属性が指定されておらず,かつ href 属性と suffix 属性が指定されている場合は真となります.
なお,指定しても空であったり,0であったりする場合 *6は,指定されていないものとして扱われます.
...自分でもわけが分からなくなってきた.(^_^; 要するに,以下のような場合を想定しているわけです.
- 画像を表示.
- src 属性を指定.(suffix 属性がついていても無視)
- 大きな画像へのリンクがついたサムネイルを表示.
- href 属性,suffix 属性を指定.
- リンクがついた画像を表示.
- src 属性,href 属性を指定.
- 画像があるディレクトリはいつも同じ(または同じディレクトリ以下).
- base 属性,localbase 属性を指定.違うディレクトリを指定したいときは絶対パスを使う.
これらより細かいことは面倒くさいので書きませんが,不明な点があればご連絡下さい.ちゃんとテストしていないので,バグの可能性が高いです.(^_^;
毎度のことですが,何が起きても私は責任を負いません.著作権は主張しますが,改変,再配布は自由にして頂いて構いません.
上記のファイルを,plugins ディレクトリに入れれば,使えます.ただし,Image::Size が必要ですので,なければ入れてください.

コメントする