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.'}>
プラグインを使うことでテンプレートの構造化プログラミングが可能になる。