お知らせ

Movable Type プロフェッショナル・スタイル MT4.1対応 2008年4月8日

Movable Typeプロフェッショナル・スタイル」が発売されました。
Movable Typeの第一線に関わる人々の共著で、Movable Typeをビジネスサイト構築に活かすテクニックが満載です。
Movable Typeでサイト構築を行っているWeb制作会社等の方々にお勧めです。

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

変数処理を改良するプラグイン(その1)

| コメント(11) | トラックバック(2)

2005年12月28日 12時20分
以下の不具合があったので修正しました。
・MTIfNumVarrタグで、比較対照の値が0の時に正しく比較ができていませんでした。
・MTIfStrVarrタグで、比較対照の値が空文字列の時に正しく比較ができていませんでした。

Movable Typeでは、「MTSetVar」「MTGetVar」というテンプレートタグを使うことで、テンプレート内で「変数」を扱うことができます。
ただ、この2つのタグだけでは、変数の使い道が限定的になります。
そのためか、これらのタグはあまり使われていないようです。

そこで、変数の扱いを改良するプラグインを作成しました。
今日は、変数の概要と、このプラグインのテンプレートタグの書き方を解説します。

1.MTSetVar/MTGetVarタグについて

まず、このプラグインの前段階として、MTSetVar/MTGetVarタグの使い方を解説しておきましょう。

MTSetVar/MTGetVarタグは、「変数」を扱うタグです。
変数とは、値を入れておく入れ物のことです。

MTSetVarタグは、変数に値を入れる働きをします。書き方は以下のようになります。

<MTSetVar name="変数名" value="変数に入れる値">

一方、MTGetVarタグは、変数の値をページに出力するものです。書き方は以下のようになります。

<MTGetVar name="変数名">

例えば、テンプレートに以下のような部分を入れるとします。

<MTSetVar name="var" value="ABC">
<MTGetVar name="var">

この場合、1行目のMTSetVarタグで、変数varに「ABC」という値が入ります。
次に、2行目のMTGetVarタグで、変数varの値が出力されます。1行目で変数varに「ABC」を入れましたので、このタグによって「ABC」が出力されることになります。

2.VarHandlerプラグインのインストール

MTSetVar/MTGetVarタグでは、変数に値を入れることと、その値を出力することができます。
ただ、変数間で計算をしたり、変数の値で条件判断したりする機能がありません。
そこで、それらの機能を持ったプラグインとして、「VarHandler」というものを作りました。

VarHandlerプラグインは、以下のページからダウンロードすることができます。

VarHandler.txt

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

表示されたソースをすべてコピーしてメモ帳等に貼り付け、「VarHandler.pl」のファイル名をつけて保存してください。
そして、Movable Typeの「plugins」ディレクトリにアップロードしてください。

3.変数間で計算するタグ

このプラグインをインストールすると、いくつかのテンプレートタグが追加されます。
まず、変数間で計算をするタグとして、以下の5つが追加されます。

テンプレートタグ計算の種類
MTAddVar足し算
MTSubVar引き算
MTMultVar掛け算
MTDivVar割り算
MTConcatVar文字として連結

いずれのタグも、「name」と、「value」または「name2」のアトリビュートをとります。
<MT○○○Var name="変数名" value="値">とすると、変数と値との間で計算が行われ、その結果が変数に入れなおされます。
また、<MT○○○Var name="変数1" name2="変数2">とすると、変数1と変数2との間で計算が行われ、その結果が変数1に入れなおされます。

例えば、以下のようにタグを組み合わせるとします。

<MTSetVar name="var" value="2">
<MTAddVar name="var" value="3">

この場合、1行目のMTSetVarタグで、変数varの値が2になります。
そして、2行目のMTAddVarタグで変数varに3が足され、値が5に変わります。

例えば、以下のようにタグを組み合わせるとします。

<MTSetVar name="var1" value="ABC">
<MTSetVar name="var2" value="DEF">
<MTConcatVar name="var1" name2="var2">

この場合、1行目と2行目のMTSetVarタグで、変数var1/var2の値が、それぞれ「ABC」/「DEF」になります。
そして、3行目のMTConcatVarタグで変数var1の値(「ABC」)に変数var2の値(「DEF」)が連結され、変数var1の値は「ABCDEF」になります。

なお、これらのタグは計算を行うだけで、計算結果は出力しません。
出力はMTGetVarタグで行います。

3.変数の値を条件判断に使うタグ

変数の値で条件を判断して、処理を分けるようにすることもできます。
そのためのタグとして、以下の2つがあります。

テンプレートタグ条件判断の種類
MTIfNumVar変数の値を数値として他の値や変数と比較
MTIfStrVar変数の値を文字列として他の値や変数と比較

いずれのタグも、「name」と、「value」または「name2」のアトリビュートをとります。
<MTIf○○○Var name="変数名" value="値">とすると、変数と値とを比較して、等しいかどうかで処理が分けられます。
また、<MTIf○○○Var name="変数1" name2="変数2">とすると、変数1と変数2の値を比較して、等しいかどうかで処理が分けられます。

例えば、以下のようにタグを組み合わせるとします。

<MTIfNumVar name="var" value="1">
ABC
<MTElse>
DEF
</MTElse>
</MTIfNumVar>

この場合、変数varの値が1になっていれば「ABC」が出力され、そうでなければ「DEF」が出力されます。

4.値を入れるタグ

変数に値を入れるタグとして、前述のMTSetVarタグがありますが、それを拡張した「MTEqualVar」「MTTagValueVar」というタグも追加されます。
<MTEqualVar name="変数1" name2="変数2">とすることで、変数1に変数2の値を入れることができます。
また、MTTagValueVarタグはコンテナタグで、コンテナ内の内容(テンプレートタグを含む)を変数に入れることができます。
例えば、以下のようにタグを組み合わせると、変数countにはBlog全体のエントリー数が入ります。

<MTTagValueVar name="count"><MTBlogEntryCount></MTTagValueVar>

MTTagValueVarタグとMTIf○○○Varタグを組み合わせると、「テンプレートタグの値が○○○かどうかで処理を分ける」といったことができます。

明日は、これらのタグを使った具体的な例を紹介する予定です。

関連するエントリー(2件)

トラックバック(2件)

このブログ記事を参照しているブログ一覧: 変数処理を改良するプラグイン(その1)

このブログ記事に対するトラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/397.

» VarHandlerプラグイン(あんちもん2.Lab)からのトラックバック

藤本壱さん作のVarHandlerプラグインの紹介と、拙作 AutoIncrementalVar プラグインとの比較・検証。 続きを読む

» ダイナミック・パブリッシング対応 VarHandler プラグイン(あんちもん2.Lab)からのトラックバック

VarHandlerプラグイン(v1.00)の、ダイナミック・パブリッシング対応PHP版を、作っちゃいました。 続きを読む

コメント(スレッド10件,コメント11件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 かげさん : (無題)

前にMTタグをいじってて
これができなくて、わからん!
と騒いでいた時期があります。

できないものは、できないんだよ
と言ってあきらめたんですが
プラグインを作るとできるんですね。
って、ココログじゃむりだぁ!(笑)

No.2  : (無題)

>かげさん
こんにちは。

プラグインで機能を拡張していくことができる点は、MTの大きなメリットです。
やはりココログからMTに移行するしかないでしょう(笑)。

No.3 おねい : (無題)

質問があります。

VarHandler.plをインストールしてみたのですが、うまく反映されないかったので、プラグインの設定を確認してみたところ、エラーがでてしまいました。MovableTypeのバージョンは3.33ですが、それが原因でしょうか?

---以下がエラーメッセージです。
VarHandler.pl
プラグイン・エラー:
Unrecognized character \x80 at /Library/WebServer/CGI-Executables/mt/plugins/VarHandler.pl line 29. Compilation failed in require at lib/MT.pm line 619.
---ここまで

システム的にはあまり詳しくないので、ご指導よろしくお願い申し上げます。

No.4  Author Profile Page: (無題)

>おねいさん
こんにちは。

アップロードしたソースコードの中に、全角文字か何かが混入しているようです。
プラグインのソースコードをもう一度コピーしなおして、再度アップロードしてみてください。

No.5 おねい : (無題)

壱さま

ご指摘ありがとうございます。
解決いたしました。

こぴぺしたエディターのせいか、半角¥が、化けてしまっていたようです。
プラグイン設定のところのエラーも出なくなりました。

お忙しい中、素早くご回答いただき、大変助かります。
どうもありがとうございました!

No.6  Author Profile Page: (無題)

質問させてください。
http://yukarinoniwa.mamapapuru.net/
でサイト作成中の紫と申します。

Q<Mtsetvar name="ctlbl" value="<$MTCategoryLabel$>">
とすることはできないのでしょうか?
valueにMTの変数タグって使えないのですか?
<mtgetvar name="ctlbl">とすると

"<

と表示されちゃうんです。
。。。ナゼ?


これが使えたら、カテゴリーアーカイブのテンプレートで、カテゴリーアーカイブ名を判定して、スタイルシートを変えたりできるはず。。
そうすると、タブインデックスとかが簡単にできると思ったのですが。。。
どこか根本的に勘違いしてるんでしょうか。汗教えていただけませんか?ハート

No.7 紫 Author Profile Page: (無題)

すみません。
コメントにMTかいちゃったら、まずかったのでしょうか。
(>_<)

すみません。
メールにします。。。

No.8  Author Profile Page: (無題)

>紫さん
こんにちは。プラグインご利用ありがとうございます。

Movable Typeでは、テンプレートタグのアトリビュートに、他のテンプレートタグの値を指定するといったことは、標準の機能では残念ながらできません。
ただ、当プラグインでは、ご希望のようなことをしたい場合は、以下のように書くことができます。

<MTTagValueVar name="ctlbl"><$MTCategoryLabel$></MTTagValueVar>

また、MT3.3以上をお使いであれば、MT標準のMTSetVarBlockというタグを使って、以下のように書くこともできます。

<MTSetVarBlock name="ctlbl"><$MTCategoryLabel$></MTSetVarBlock>

ちなみに、任意のテンプレートタグで、アトリビュートに他のテンプレートタグの値を使いたい場合は、Stepan Riha氏が作成した「MTTagInvoke」というプラグインを使う方法があります。

http://www.nonplus.net/software/mt/MTTagInvoke.htm

No.9  Author Profile Page: (無題)

壱さん、すばやく対応ありがとうございました。
すっごくよくわかりました。
ちょっとやってみて、また報告させてもらいます。
今後ともちょくちょくよらせて下さい。

でも、MTってスゴイですね。これタダ?ってちょっとビックリ。
あ、それと、よければリンクを貼らせてもらってもよろしいですか?
ハート

No.10 ほりけん : 除算の余りについて

こんにちは。
変数の計算できるプラグインを探していて辿りつきました。
ただ、探していたのが余りを求められるもので
算 術 演 算 子の%の代わりになるものを求めてました。

ソースを見たところ $ctx の部分で計算されているようですが、
ここで%を入れてあげるだけで
余りを求めるタグを作れますでしょうか?

もし、簡単に対応できるようであれば
ご教授いただけたらと思います。
よろしくお願い致します。

No.11  Author Profile Page: Re: 除算の余りについて

>ほりけんさん
こんにちは。

以下のようにすれば、余りを求める「MTModVar」というタグを追加することができます。

まず、プラグインの先頭の方にある「# add tag」の後に、以下の文を追加します。

MT::Template::Context->add_tag(ModVar => \&mod_var);

さらに、以下のmod_varサブルーチンを追加します。

# mod_var main
sub mod_var {
    my ($ctx, $args) = @_;
    my ($var1, $var2);

    return $ctx->error('Attribute \'name\' is required.')
        unless ($args->{name});
    &_check_attribute($ctx, $args, \$var1, \$var2, 1);
    $ctx->{__stash}{vars}{$args->{name}} = $var1 % $var2;
    '';
}

コメントする

管理者のみにコメントを送信したい場合は、「コメントを秘密にする」のチェックをオンにしてコメントを送信するか、メールフォームからメールをお送りください。

ブログ全体の感想など、この記事に直接に関係しないコメントは、ゲストブックにお気軽に投稿してください。


アーカイブ

ブログパーツ

ステータス