SmartyのプラグインをSimgに取り込もう。
ファイルシステムから自動的に取り込むのが簡単そうだが、これだと1プラグイン 1ファイルとなるので、なんだかごちゃごちゃしそうだ。
SimgではregisterPluginで登録しよう。
まずはディレクトリだ。
プラグインを定義するPHPファイルの格納場所を規定する。
分類としてはビューだろう。
application/view/plugin
ここにPHPファイルを配備し、プラグイン本体となる関数を記述する。
プラグイン関数の命名規約は以下だ。
これはSimgの規定である。
(PHPファイル名はconfigで指定するので自由。)
function (プラグインタイプ)_(プラグイン名)
Simg対応のプラグインタイプは、今のところ以下だ。
- function
- block
- compiler
- modifier
PHPファイルには複数のプラグイン関数を記述できる。
さて、このあたりの情報をSimgに伝える必要がある。
Simgではapplication/configに記述するのが決まりだ。
configファイル名は
plugin.ini
とする。
内容は以下の通り。
[prefix] plugin=PLUGIN_ parameter=PP_ [plugin] SAMPLE=samp_: psample: fupper, bupper, cmecho, capitalize, truncate [parameter] TEXT=text
これはデモのplugin.iniだ。
定義内容を以下に示す。
定数名 | 値 | 補足 |
---|---|---|
PLUGIN_SAMPLE | samp_: psample | plugin接頭辞: samp_ |
pluginファイル名: psample.php | ||
PP_TEXT | text | プラグインの引数名 |
Simg対応のプラグインは4種類だから、定義可能な関数は以下の組合せとなる。
定義しなければ無視されるので、必要なタイプのものだけを定義しよう。
プラグインタイプ | 関数名 |
---|---|
関数 | function_fupper |
function_bupper | |
function_cmecho | |
function_capitalize | |
function_truncate | |
修飾子 | modifier_fupper |
modifier_bupper | |
modifier_cmecho | |
modifier_capitalize | |
modifier_truncate | |
ブロック | block_fupper |
block_bupper | |
block_cmecho | |
block_capitalize | |
block_truncate | |
コンパイラ | compiler_fupper |
compiler_bupper | |
compiler_cmecho | |
compiler_capitalize | |
compiler_truncate |
実際の内容(psample.php)を見てみよう。
function function_fupper($params, &$smarty) { return strtoupper($params[PP_TEXT]); } function modifier_truncate($string, $length = 80, $etc = '...') { $ret = ''; if($length > 0) { if(strlen($string) > $length) { $length -= strlen($etc); $ret = substr($string, 0, $length + 1) . $etc; } else { $ret = $string; } } return $ret; } function block_bupper($params, $content, &$smarty, &$repeat) { if(!$repeat) { return strtoupper($content); } } function compiler_cmecho($tag_arg, &$smarty) { return ''; }
関数型の「fupper」、修飾子型の「truncate」、ブロック型の「bupper」、コンパイラ型の「cmecho」が定義されている。
このプラグインを有効にするにはrenderで、$output->activePlaginをコールする。
引数がarrayなのはプラグインを複数有効にできるからだ。
public function rendering($event, $output, $parameter, $db) { if($output->hasPartial(PARTIAL_BASE)) { $output->activePlagin(array(PLUGIN_SAMPLE)); /* * 省略 */ } }
以上でプラグインが利用できる。
<{samp_fupper text='simple is great'}><{samp_bupper}> bridge over troubled water <{/samp_bupper}><{"When you're weary feelin' small, When tears are in your eyes"| samp_truncate:40:'...'}><{samp_cmecho text='Copyright 2015 SysCon All rights reserved.'}>
プラグインを使うことでテンプレートの構造化プログラミングが可能になる。