<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>浮山狼de博客 &#187; template</title>
	<atom:link href="https://www.fushanlang.com/tag/template/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fushanlang.com</link>
	<description>next station - 下一站，活在当下，且行且思</description>
	<lastBuildDate>Sat, 29 Nov 2014 15:14:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.5</generator>
	<item>
		<title>最轻巧的javascript模板函数</title>
		<link>https://www.fushanlang.com/the-most-lightweight-javascript-template-function-2321/</link>
		<comments>https://www.fushanlang.com/the-most-lightweight-javascript-template-function-2321/#comments</comments>
		<pubDate>Sun, 29 Sep 2013 10:26:27 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[javas]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=2321</guid>
		<description><![CDATA[<p>随着移动互联网的发展APP站点增加，ajax数据交互变得频繁起来，许多javascript 模板终于有了用武之地。</p> <p>看过一些js模板引擎，引入很多语法，解析，使得模板字符串看上去更漂亮，更接近UI，去程序化是他们的目的。</p> <p>两年前自己也写了一个js template函数在项目中使用，今天精简了一下语法，增加error report功能方便了模板解析出错时定位问题。</p> <p>本着开源的精神，我把它放到了github上 https://github.com/fushanlang/js-template</p> <p>以及 oschina开源库里</p> <p>http://git.oschina.net/fushanlang/javascript-template</p> function js_template(t, v) { var a = ""; var echo = function (b) { a += b }; var z = window.AJ; window.AJ = z = !z ? [] : z; var s = "_{" + Math.random() + "}_"; var p = t.replace(/\n&#124;\r&#124;\t/g, <span style="color:#777"> . . . &#8594; Read More: <a href="https://www.fushanlang.com/the-most-lightweight-javascript-template-function-2321/">最轻巧的javascript模板函数</a></span>]]></description>
				<content:encoded><![CDATA[<p>随着移动互联网的发展APP站点增加，ajax数据交互变得频繁起来，许多javascript 模板终于有了用武之地。</p>
<p>看过一些js模板引擎，引入很多语法，解析，使得模板字符串看上去更漂亮，更接近UI，去程序化是他们的目的。</p>
<p>两年前自己也写了一个js template函数在项目中使用，今天精简了一下语法，增加error report功能方便了模板解析出错时定位问题。</p>
<p>本着开源的精神，我把它放到了github上<br />
<a title="js-template" href="https://github.com/fushanlang/js-template" target="_blank">https://github.com/fushanlang/js-template</a></p>
<p>以及 oschina开源库里</p>
<p><a href="http://git.oschina.net/fushanlang/javascript-template" target="_blank">http://git.oschina.net/fushanlang/javascript-template</a></p>
<pre name="code" class="javascript">
function js_template(t, v) {
    var a = "";
    var echo = function (b) {
        a += b
    };
    var z = window.AJ;
    window.AJ = z = !z ? [] : z;
    var s = "_{" + Math.random() + "}_";
    var p = t.replace(/\n|\r|\t/g, "");
    var j = [];
    p = p.replace(/<js>(.*?)<\/js>/g, function ($0, $1) {
        j.push($1);
        return s
    });
    var txt = p.split(s);
    p = "";
    for (var i = 0; i < j.length; ++i) {
        p += "echo(txt[" + i + "]);";
        p += j[i]
    }
    ;
    p += "echo(txt[" + j.length + "]);";
    try {
        if (v) {
            for (var i in v) {
                eval("var " + i + " =v[i];")
            }
        }
        ;
        eval(p)
    } catch (error) {
        z.push([error, p, t])
    } finally {
        return a
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/the-most-lightweight-javascript-template-function-2321/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php模板实现</title>
		<link>https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/</link>
		<comments>https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 06:23:51 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[php模板]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[模板]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=119</guid>
		<description><![CDATA[<p>         php开发中常用的模板有smarty, zend framework自身也有一套模板。实际上除非不得不使用它们，否则你应该很快就意识到，使用起来并不怎么方便。smarty需要引入库文件，学习smarty模板语法，虽然和php相似，却又不尽相同，增加了学习成本，使用起来还要config一下。要想使用ZendFramework 中的模板，肯定得使用ZF库不可，已使用ZF库，开发模式便很容易被限制在ZF下，所以也不是很灵活。</p> <p>       先说一说为什么要使用模板技术，实际开发中所谓模板，不过是一段特殊的静态代码与动态变量的结合。所以调用模板函数时最常用的两个方法是： (1) $tplObject-&#62;assign($key,$value)  &#8212; 模板变量赋值。(2)$tplObject-&#62;fetch($template_file) &#8212; 将模板对象与某一个模板文件结合输出结果。 有人说，php中的模板技术是为了“要让美工和程序员的工作分开，要让代码层和表现层分开。”，愿望是好的，但实际上我们使用的任意一款模板库的模板文件，美工都无法直接使用，很难做到所谓的”程序员和美工分开“。 而”代码和表现分开“更像是纯原生的字符串模板一样，例如”{$name} is a good guy! &#60;br/&#62;&#60;h2&#62;{$name}&#60;/h2&#62; is so beautiful!“ 中只需要替换name变量，就可以达到所谓的”代码表现分离“。实际上这用纯原生模板，功能有限。</p> <p>     这也就意味着，模板文件中的变量并不只是字符串替换这么简单，还应该允许其他多种运算。那么模板类库是怎么解决这个问题的呢？smarty里采用了类php语法的模板语法，例如{foreach}{/foreach},{if}{else}{/if}&#8230;{php} {php}等等,ZendFramework里的view倒是没有采用增添语法的方式，采用原生php的方式。此时我们才想到，php代码本身就是模板的最合适实现，不需要再搞出其他模板来。于是我们可以有一个简单的模板实现，先举一个简单的例子：</p> /**** * 简易的模板类 * 两个常用方法 * assign($key,$value)---添加模板变量，$key是模板文件中的变量名称。 * fetch($inc_file_path)--与模板文件一块儿解析返回解析后的字符串。 */ class IncFile { private $__vars = array ();//模板变量hash数组 public function __construct() { } /*** * 增加模板变量 * @param <span style="color:#777"> . . . &#8594; Read More: <a href="https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/">php模板实现</a></span>]]></description>
				<content:encoded><![CDATA[<p>         php开发中常用的模板有smarty, zend framework自身也有一套模板。实际上除非不得不使用它们，否则你应该很快就意识到，使用起来并不怎么方便。smarty需要引入库文件，学习smarty模板语法，虽然和php相似，却又不尽相同，增加了学习成本，使用起来还要config一下。要想使用ZendFramework 中的模板，肯定得使用ZF库不可，已使用ZF库，开发模式便很容易被限制在ZF下，所以也不是很灵活。</p>
<p>       先说一说为什么要使用模板技术，实际开发中所谓模板，不过是一段特殊的静态代码与动态变量的结合。所以调用模板函数时最常用的两个方法是：<br />
(1) $tplObject-&gt;assign($key,$value)  &#8212; 模板变量赋值。(2)$tplObject-&gt;fetch($template_file) &#8212; 将模板对象与某一个模板文件结合输出结果。<span id="more-119"></span><br />
有人说，php中的模板技术是为了“要让美工和程序员的工作分开，要让代码层和表现层分开。”，愿望是好的，但实际上我们使用的任意一款模板库的模板文件，美工都无法直接使用，很难做到所谓的”程序员和美工分开“。 而”代码和表现分开“更像是纯原生的字符串模板一样，例如”{$name} is a good guy! &lt;br/&gt;&lt;h2&gt;{$name}&lt;/h2&gt; is so beautiful!“ 中只需要替换name变量，就可以达到所谓的”代码表现分离“。实际上这用纯原生模板，功能有限。</p>
<p>     这也就意味着，模板文件中的变量并不只是字符串替换这么简单，还应该允许其他多种运算。那么模板类库是怎么解决这个问题的呢？smarty里采用了类php语法的模板语法，例如{foreach}{/foreach},{if}{else}{/if}&#8230;{php} {php}等等,ZendFramework里的view倒是没有采用增添语法的方式，采用原生php的方式。此时我们才想到，php代码本身就是模板的最合适实现，不需要再搞出其他模板来。于是我们可以有一个简单的模板实现，先举一个简单的例子：</p>
<pre>/****
 * 简易的模板类
 * 两个常用方法
 * assign($key,$value)---添加模板变量，$key是模板文件中的变量名称。
 * fetch($inc_file_path)--与模板文件一块儿解析返回解析后的字符串。
 */
class IncFile {
	private $__vars = array ();//模板变量hash数组

	public function __construct() {
	}

	/***
	 * 增加模板变量
	 * @param String $key
	 * @param Object|Value  $value。
	 */
	public function assign($key, $value) {
		$this-&gt;__vars[$key] = $value;
	}

	public function fetch($inc_path) {
		$result = "";
		ob_start();//打开缓冲区，准备输出模板结果
		foreach ($this-&gt;__vars as $k =&gt; &amp; $v) {
			$$k = $v;//这里把hash数组中的元素，以局部变量的方式定义声明一下，这样才能用到模板文件里。
                                     //例如模板中&lt;?php echo $user.name?&gt;,hash数组中是$__vars['user']={name=&gt;'Tom'}
		}
		include ($inc_path);//将模板文件包含进来，执行
		$result = ob_get_contents();//返回缓冲区内容
		ob_get_clean();//清空缓冲区
		return $result;
	}
}
这便是我最近经常使用的一个模板函数，使用起来很是轻巧。</pre>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
