MODxのスニペットコール解体新書

MODx Wikiにスニペットコールの解説ページが作成されています。

Snippet call anatomy」では、スニペットとスニペットコールについての説明から始まり、スニペットコールの構文や例が詳細に紹介されています。その中で、いくつか気になったものがあったのでメモしておきます。

スニペットコールは入れ子が可能

漠然とスニペットコールの入れ子はできない気がしていたのですが(忘れていただけかもしれませんが)、普通に入れ子にもできます。次のように、パラメータの中でスニペットコールします。

[[スニペット名? &パラメータ名=`[!スニペット名? &パラメータ名=``!]`]]

スニペットコールを入れ子にする場合の注意として、スニペットコールでのキャッシュの設定について書かれています。

[[スニペット名]]によるスニペットコールでは、パラメータが同じスニペットコールについてはその結果がキャッシュされます。外側のスニペットコールをキャッシュしない設定の[!スニペット名!]で呼び出したとしても、内側のスニペットコールをキャッシュする設定で呼び出している場合、既にキャッシュが存在すればそのキャッシュが使われます。

パラメータとして渡すスニペットコールがキャッシュされては困る場合は、内側のスニペットコールをキャッシュしない設定で呼び出すようにすれば良いということになります。

APIを利用してスニペット中から別のスニペットを実行することもできますが、スニペットコールが入れ子にできることを知っておけば、わざわざそんなことをするケースも少なくなるかもしれません。

スニペットのパラメータにはPHPの実行結果が渡せる

スニペットのパラメータとして@バインディングが使えるようです。次のように@EVALを使って、PHPの実行結果をパラメータとして渡せます。

[[スニペット名? &パラメータ名=`@EVAL date()`]]

テンプレート変数や別のスニペットを作ったりしなくても、簡単なコードであれば、この方法ですんでしまいます。

これは知らなかったのでさっそく試してみましたが、うまくいきませんでした。「In some cases you can also use a binder like @EVAL or @CODE as a parameter values.」とあるので、スニペット側で処理してやらないとダメなのかもしれません。

最後に「Snippet Calls vs. Setup Wizards」の中で、ウィザードのようなGUIではなく、スニペットコールという形式をとっている理由として、「1) much more flexibility allowing you to tweak every parameter; 2) easy to develop.」と書かれています。

また、参照としてリンクされている「Creating Snippets」では、スニペットの開発方法が詳細に解説されていますが、このページを読むと、ロジックとプレゼンテーション、インプットとアウトプットの高次での分離が設計思想の一つとなっていることがわかります。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/106/trackback/
この記事のURI
http://dxd8.com/archives/106/