お知らせ

Movable Type 5.1 プロの現場の仕事術2011年6月30日

Movable Type 5.1 プロの現場の仕事術」が発売されました。
Movable Type 5.1の基本から、スマートフォン用サイトの作成、管理画面のカスタマイズなど、まさにプロの方のために書かれたMovable Type 5.1の解説書です。
Movable Typeでサイト制作をされている皆様はぜひお買い求めください。

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

変数の機能を拡張するプラグイン

| コメント(5) | トラックバック(1)

Movable Type 4以降では、テンプレート内で変数を使う機能が強化されました。
ただ、不便な点もいくつかあります。
その点を強化するプラグインを作りましたので、公開します。

2008年12月16日
式の中でrand関数が使えなかったので修正しました。

1.インストール

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

VarExpand_1_01.zip

ファイルを解凍すると、「VarExpand」というフォルダができます。
このフォルダを、Movable Typeの「plugins」ディレクトリの中にアップロードします。

2.ライセンス

このプラグインは、MITライセンスで配布します。
商用版MT/MTOSともに、無償かつ無保証でご利用いただくことができます。

3.変数間の計算を行いやすくする

MTSetVar等のタグで、変数に値を代入することができます。
また、MTSetVarタグのopモディファイアを使うことで、簡単な計算を行うこともできます。
ただ、複雑な計算をしようとすると、MTSetVarタグを何度も使う必要がでて、テンプレートが冗長になります。

MTIfタグにはtestモディファイアがあり、式の計算結果で条件判断を行うことができます。
このプラグインでは、testモディファイアの処理を真似て、計算を行いやすくする「MTSetVarFormula」と「MTGetVarFormula」のタグを追加します。

MTSetVarFormulaタグは、計算式の結果を変数に代入する処理をします。
計算式の中では、変数は「$変数名」のように書きます。
書き方は以下のようになります。

<MTSetVarFormula name="代入先の変数名" formula="計算式">

MTGetVarFormulaタグは、計算式の結果をそのまま出力する処理をします。
書き方は以下のようになります。

<MTGetVarFormula formula="計算式">

例えば、変数yと変数zの和を2で割って、その結果を変数xに代入するには、以下のように書きます。

<MTSetVarFormula name="x" formula="($y+$z)/2">

上記の計算で、結果をそのまま出力するには、以下のように書きます。

<MTGetVarFormula formula="($y+$z)/2">

また、計算式の中で、Perlの組み込み関数を使うこともできます。
例えば、変数xの絶対値を求めて、変数xに代入しなおすには、以下のように書きます。

<MTSetVarFormula name="x" formula="abs($x)">

計算式の中で、配列やハッシュを使うこともできます。

配列の要素は、「$変数名->[インデックス]」と表します。
例えば、配列xの0番の要素は、「$p->[0]」と表すことができます。

また、ハッシュの要素は、「$変数名->{キー}」と表します。
例えば、ハッシュxの中で、キーが「abc」の要素は、「$x->{abc}」と表すことができます。

4.MTSetVarTemplateのモジュールにパラメータを渡す

MTSetVarTemplateタグを使うと、テンプレート内で繰り返し出てくる部分をモジュール化して、関数のように使うことができます。
ただ、MTGetVarタグでモジュールを呼び出す際に、パラメータを渡す機能はありません。
ところが、MTIncludeタグでテンプレートモジュールを組み込む際には、パラメータを渡す機能があります。

そこで、このプラグインでは、MTIncludeタグのように、MTSetVarTemplateタグのモジュールにパラメータを渡す機能を追加します。
その場合には「MTGetVarFunction」というタグを使います。
書き方は以下のようになります。

<MTGetVarFunction name="モジュール名" パラメータ名="値" パラメータ名="値" ・・・>

例えば、以下のようにMTSetVarTemplateタグでモジュールを定義するとします。
このモジュールは、変数textの文字列を、変数tagで示すタグによって囲む処理をするものです。

<MTSetVarTemplate name="wrap_tag">
<<MTGetVar name="tag">><MTGetVar name="text"></<MTGetVar name="tag">>
</MTSetVarTemplate>

このモジュールを使って、「Movable Type」という文字列を、strongタグで囲みたいとします。
MTGetVarFunctionタグを使うと、以下のように書くことができます。

<MTGetVarFunction name="wrap_tag" tag="strong" text="Movable Type">

なお、MTGetVarFunctionタグ内でパラメータとして渡した変数は、MTSetVarTemplateのモジュールの中でのみアクセスすることができます。
MTGetVarFunctionタグの処理が終わると、パラメータとして渡した変数はクリアされます。

Facebook連携

当記事について「いいね」や「送信」を行っていただけると幸いです。


この記事についてウォールに投稿

トラックバック(1)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/1281.

コメント(スレッド3件,コメント5件)

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

No.1 でみ : 検索画面とコメント投稿完了画面でエラーが出ました。

こんにちは。ご質問させていただきます。
こちらのプラグインを使わせていただいたところ、
検索結果画面とコメント投稿完了画面でエラーが出ました。

--エラー内容----------
Name "main::x" used only once: possible typo at /mt/plugins/VarExpand/VarExpand.pl line 63.
----------------------

このエラー自体は問題ないのですが、それがカテゴリ一覧の途中にテキストデータとして上記の内容が出力されてしまいます。
他にも変数"entry"など、たくさん出力されています。

解決方法がございましたら教えていただきたいです。

MTのバージョン:4.25
サーバ:バリュードメインの試用無料サーバ
↑実運用はコアサーバーを予定しています。

よろしくお願いいたします。

No.2  : Re:検索画面とコメント投稿完了画面でエラーが出ました。

>でみさん
こんにちは。

MTSetVarFormulaタグの処理の際に問題が起こっているようです。
MTSetVarFormulaタグをどのように書いているかを、具体的にお教えいただけないでしょうか。

No.3 でみ : Re:検索画面とコメント投稿完了画面でエラーが出ました。

迅速なお返事ありがとうございます!

> MTSetVarFormulaタグをどのように書いているかを、具体的にお教えいただけないでしょうか。

--ソースコード----------------
<mt:If name="tempName" eq="system_search">
<mt:SearchResults>
<mt:SetVarFormula name="x" formula="int(rand(03))">
<div class="entry entry-style<mt:GetVar name="x" />">



</div>
</mt:SearchResults>
<mt:Else>
<mt:Entries sort_order="descend">
<div class="entry entry-style<mt:GetVar name="x" />">



</div>
</mt:Entries>
</mt:Else>
</mt:If>
------------------------------

上記のように書いています。用途は、エントリの装飾をランダムにするためにclass名entry-styleのあとに数字を付けています。

知識が乏しいためにお手数をおかけしてすみません。
よろしくお願いいたします。

No.4 でみ : Re:検索画面とコメント投稿完了画面でエラーが出ました。

お世話になります。
ソースコードが、ソースコードなので消えてしまいました。
至らず、すみません。
再返信させていただきます。

--ソースコード----------------
<mt:If name="tempName" eq="system_search">
<mt:SearchResults>
<mt:SetVarFormula name="x" formula="int(rand(03))">
<div class="entry entry-style<mt:GetVar name="x" />">



</div>
</mt:SearchResults>
<mt:Else>
<mt:Entries sort_order="descend">
<div class="entry entry-style<mt:GetVar name="x" />">



</div>
</mt:Entries>
</mt:Else>
</mt:If>
------------------------------

No.5  : Re:検索画面とコメント投稿完了画面でエラーが出ました。

>でみさん
こんにちは。

こちらでもCORE SERVERで検索結果テンプレートにMTSetVarFormulaタグを入れて試してみましたが、問題を再現することができませんでした。
申し訳ありませんが、外から見える症状だけでは、原因は不明です。

なお、乱数を出力したいということであれば、一昨日に公開したPerlModuleプラグインに例がありますので、そちらを利用する方法もあります。

http://www.h-fj.com/blog/archives/2009/04/27-222123.php

コメントする


Facebookでコメント

試験的にFacebookのコメントフォームを設置しました。