registerFilter 过滤器
过滤器主要用于编译之前,以及将返回内容之前进行替换内容的方法。
需要显式的注册,不会自动加载。
参数说明:
string $type 注册类型,
只有两种过滤器 pre 和 output 过滤器,
pre 用于模板加载后,编译之前对模板内容进行替换。
output 用于输出之前进行内容替换。
$func 替换的函数,可以是匿名函数 全局函数名 静态类::函数名 只要满足 is_callable 都可以支持。
$func 会接收2个参数 ,第一个是 $content 第2个是 $sdopx 模板引擎实例。
$func 需要返回 被替换后的内容。
例子如下:
define('ROOT_DIR', __DIR__);
date_default_timezone_set('PRC');
require(ROOT_DIR . '/vendor/autoload.php');
use sdopx\Sdopx;
Sdopx::$defaultTemplateDirs = './view';
Sdopx::$defaultCompileDir = './runtime';
//注册前置过滤器
Sdopx::registerFilter('pre', function ($content, $sdopx) {
return str_replace('__URL__', '{$url}', $content);
});
//注册输出过滤器
Sdopx::registerFilter('output', function ($content, $sdopx) {
$public = isset($sdopx->_cache['__PUBLIC__']) ? $sdopx->_cache['__PUBLIC__'] : '/static/';
return str_replace('__PUBLIC__', $public, $content);
});
$sdopx = new Sdopx();
$sdopx->_cache['__PUBLIC__'] = '/public/';
$sdopx->assign('url', 'sdopx.wj008.net');
$sdopx->display('index.tpl');
测试模板:
<html>
<title>sdopx test</title>
<script src="__PUBLIC__/my.js"></script>
<body>
<a href="__URL__">__URL__</a>
</body>
</html>
输出:
<html>
<title>sdopx test</title>
<script src="/public//my.js"></script>
<body>
<a href="sdopx.wj008.net">sdopx.wj008.net</a>
</body>
</html>