最新消息:

简单的nano模板引擎

Javascript ZmmFly 1883浏览 0评论

自己弄了个小项目,涉及到前端,有部分不得不在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模板引擎

发表我的评论
取消评论

Protected by WP Anti Spam

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址