自己弄了个小项目,涉及到前端,有部分不得不在js里写html,卖相太难看了。。。
于是就找到了nano,第一眼就喜欢上了,原js版的就那么几行,简单明了,后来也证明非常好用。
现在又得在php里操作字串,于是就看着js弄了个php版出来了。
<?php
/**
* NANO - Template Engine for php
* @author Xiyan
* @param string $templ 模板字串
* @param array $data 模板数据
* @return string 最终生成的字串
*/
function nano($templ,$data)
{
//全局变量前加上随机前缀防止冲突
global $EbrzOW9K_nano_data;
$EbrzOW9K_nano_data = $data;
return preg_replace_callback(
'/\{([\w\.]*)\}/',
function($matches){
global $EbrzOW9K_nano_data;
$keys = explode('.', $matches[1]);
$index = array_shift($keys);
$v = isset($EbrzOW9K_nano_data[$index]) ? $EbrzOW9K_nano_data[$index] : array();
for ($i = 0,$l=count($keys) ; $i < $l ; $i++ )
{
$v = isset($v[$keys[$i]]) ? $v[$keys[$i]] : '';
}
return $v;
},
$templ
);
}
原js版:
/* Nano Templates (Tomasz Mazur, Jacek Becela) */
/**
* Simplest Templating Engine
* @param {string} template 模板字串
* @param {object} data 模板数据
* @return {string} 最终结果
*/
function nano(template, data) {
return template.replace(/\{([\w\.]*)\}/g, function(str, key) {
var keys = key.split("."), v = data[keys.shift()];
for (var i = 0, l = keys.length; i < l; i++) v = v[keys[i]];
return (typeof v !== "undefined" && v !== null) ? v : "";
});
}
原项目地址:NANO – Template Engine on Github
转载请注明:神奇海域 » 简单的nano模板引擎