「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
変数の機能を拡張するプラグイン
Movable Type 4以降では、テンプレート内で変数を使う機能が強化されました。
ただ、不便な点もいくつかあります。
その点を強化するプラグインを作りましたので、公開します。
2008年12月16日
式の中でrand関数が使えなかったので修正しました。
2013年5月15日
Movable Type 5.x対応にしました。
1.インストール
プラグインは以下からダウンロードすることができます。
ファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリの中にアップロードします。
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タグの処理が終わると、パラメータとして渡した変数はクリアされます。
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
でみ
こんにちは。ご質問させていただきます。
こちらのプラグインを使わせていただいたところ、
検索結果画面とコメント投稿完了画面でエラーが出ました。
--エラー内容----------
Name "main::x" used only once: possible typo at /mt/plugins/VarExpand/VarExpand.pl line 63.
----------------------
このエラー自体は問題ないのですが、それがカテゴリ一覧の途中にテキストデータとして上記の内容が出力されてしまいます。
他にも変数"entry"など、たくさん出力されています。
解決方法がございましたら教えていただきたいです。
MTのバージョン:4.25
サーバ:バリュードメインの試用無料サーバ
↑実運用はコアサーバーを予定しています。
よろしくお願いいたします。
壱からでみへの返信
>でみさん
こんにちは。
MTSetVarFormulaタグの処理の際に問題が起こっているようです。
MTSetVarFormulaタグをどのように書いているかを、具体的にお教えいただけないでしょうか。
でみからでみへの返信
迅速なお返事ありがとうございます!
> 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のあとに数字を付けています。
知識が乏しいためにお手数をおかけしてすみません。
よろしくお願いいたします。
でみ
お世話になります。
ソースコードが、ソースコードなので消えてしまいました。
至らず、すみません。
再返信させていただきます。
--ソースコード----------------
<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>
------------------------------
壱
>でみさん
こんにちは。
こちらでもCORE SERVERで検索結果テンプレートにMTSetVarFormulaタグを入れて試してみましたが、問題を再現することができませんでした。
申し訳ありませんが、外から見える症状だけでは、原因は不明です。
なお、乱数を出力したいということであれば、一昨日に公開したPerlModuleプラグインに例がありますので、そちらを利用する方法もあります。
http://www.h-fj.com/blog/archives/2009/04/27-222123.php