Atitit.jpg png格式差异以及解决jpg图片不显示的问题

Atitit.模板引擎原理以及常见模板技术javascript

 

 

1. Asp Php jsp smarty模板1php

1.1. 模板引擎基本原理1html

1.2. 调试模式原理2前端

2. Attilax总结的模板引擎原理2java

3. 支持两种类型的错误捕获,一是渲染错误(Render Error)与编译错误(Syntax Error)2程序员

3.1. 一、渲染错误2正则表达式

3.2. 二、编译错误3后端

4. 常见的模板技术 t4   Razor4数组

 

 

1. Asp Php jsp smarty模板

 

1.1. 模板引擎基本原理

虽然每一个引擎从模板语法、语法解析、变量赋值、字符串拼接的实现方式各有所不一样,但关键的渲染原理仍然是动态执行 javascript 字符串。jsp

 

 

 

, Discuz的模板解析是用正则表达式替换一些模板中的规定的语言标记,而后呢,写到forumdata/templates中,再用include引用到index, forumdisplay等等中,和smarty的原理基本上相同

 

那么,这个联合页面listnews.php的代码就很简单了
<? 
Include(‘getnews.php');//获取数据 
Include(‘shownesw.php');//显示数据 
?> 
做者::  ★(attilax)>>>   绰号:老哇的爪子  全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊  汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax


总结
使用PHP标签的模板系统,可以很好的实现美工和程序的分离,同时方便程序员和美工人员的分工合做,好比在上面的例子中shownews.php由美工人员来维护,getnews.php由程序人员来维护。而listnews.php就能够由系统设计人员来维护了。固然这中间须要增长一些约定的文档。

最简单的方式就是经过replace函数了:

 

1.2. 调试模式原理

前端模板引擎不像后端模板引擎,它是动态解析,因此调试器没法定位到错误行号,而 artTemplate 经过巧妙的方式让模板调试器能够精肯定位到引起渲染错误的模板语句,例如:

 

2. Attilax总结的模板引擎原理

经过splitor  %%》区分代码和模板,而后把木板str out,在不个代码eval给挂。。

3. 支持两种类型的错误捕获,一是渲染错误(Render Error)与编译错误(Syntax Error)

3.1. 一、渲染错误

渲染错误通常是由于模板数据错误或者变量错误产生的,渲染的时候只有遇到错误才会进入调试模式从新编译模板,而不会影响正常的模板执行效率。模板编译器根据模板换行符记录行号,编译后的函数相似:

当执行过程遇到错误,立马抛出异常模板对应的行号,模板调试器再根据行号反查模板对应的语句并打印到控制台。

3.2. 二、编译错误

编译错误通常是模板语法错误,如不合格的套嵌、未知语法等。因为 artTemplate 没有进行完整的词法分析,故没法肯定错误源所在的位置,只能对错误信息与源码进行原文输出,供开发者判断。

 

 

 

  for($i = 0; $i < $nest; $i++) {<br>

 

070

     

 

071

                    $template = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\}[\n\r]*(.+?)[\n\r]*\{\/loop\}[\n\r\t]*/ies","stripvtags('\n<? if(is_array(\\1)) { foreach(\\1 as \\2) { ?>','\n\\3\n<? } } ?>\n')", $template);<br>

 

072

     

 

073

                    $template = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}[\n\r\t]*(.+?)[\n\r\t]*\{\/loop\}[\n\r\t]*/ies","stripvtags('\n<? if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>','\n\\4\n<? } } ?>\n')", $template);<br>

 

074

     

 

075

                    $template = preg_replace("/[\n\r\t]*\{if\s+(.+?)\}[\n\r]*(.+?)[\n\r]*\{\/if\}[\n\r\t]*/ies", "stripvtags('\n<? if(\\1) { ?>','\n\\2\n<? } ?>\n')"

 

 

4. 常见的模板技术 t4   Razor

 

 

微软已经有一套模板引擎T4,在设计ASP.NET MVC 3时又设计一套模板引擎Razor

 

 

 

2.装入数组

 

var r = [];

r.push('Posts: ' );

r.push(for(var i = 0; i < post.length; i++) {);

r.push('<a href="#">');

r.push(post[i].exper);

r.push('</a>');

r.push(});

 有人看到上面的代码就要笑了,第三行和最后一行代码的逻辑明显是不正确的嘛,那肿么办呢?呵呵,很简单,不放进去就好了呗,

 

var r = [];

r.push('Posts: ' );

for(var i = 0; i < post.length; i++) {

    r.push('<a href="#">');

    r.push(post[i].exper);

    r.push('</a>');

}

 这样的逻辑就十分完善了,不存在太多的漏洞,可是这个转化的过程是如何实现的?咱们必须仍是要写一个解析的模板函数出来。

 

 不过咱们并须要for,if,switch等这些东西也push到r数组中去,因此呢,还得改善下上面的代码,若是在line中发现了包含js逻辑的代码,咱们就不该该让他进门:

 

 

regOut = /(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g;

var add = function(line, js) {

    js? code += line.match(regOut) ? line + '\n' : 'r.push(' + line + ');\n' :

        code += 'r.push("' + line.replace(/"/g, '\\"') + '");\n';

};

 因此咱们只剩下最后一步工做了,把data扔进去!

 

参考

 

JavaScript模板引擎原理,几行代码的事儿 - Javascript教程_JS教程_技术文章 - 红黑联盟.html

相关文章
相关标签/搜索