26
2019.2

块标签的移形换位(内存存储)

作者: POPASP
块标签的移形换位(内存存储) 块标签作为一组封闭标签,其内容解析之后,可以不必马上输出,将其解析后的html代码块保存到一个“变量”中,在稍后位置输出,甚至多次输出。这个功能需要用到块标签存储功能的第1个与第2个参数, ```brush:html ``` 即“缓存名”与“是否立即输出” 我们以前面讲到的loopdb块标签举例: ```brush:html
ID标题添加时间
[@ContentID][@1][@2]

{$htmlContent}
ID标题添加时间
``` 结果如下图所示: [![POPASP模板引擎移形换位功能](http://www.popasp.com/images/31/31_21_1.jpg "POPASP模板引擎移形换位功能")](http://www.popasp.com/images/31/31_21_1.jpg "POPASP模板引擎移形换位功能") 替换过程如下所示: [![POPASP模板引擎移形换位功能](http://www.popasp.com/images/31/31_21_2.jpg "POPASP模板引擎移形换位功能替换过程")](http://www.popasp.com/images/31/31_21_2.jpg "POPASP模板引擎移形换位功能替换过程") 从上图中我们可以看出,loopdb标签第一次在原位解析后立即输出,第二次使用了{$标签名}再次将解析好的内容再次输出了一遍。值得注意的是,两次输出只解析了一遍。这个功能是非常实用的,像网站头尾的菜单栏有时候要输出两次,这时该功能的强大之处立即显现。 当然有时候我们想解析之后,不要立即输出,这时候我们只需要给第2个参数0值即可。我们将上面的代码进行修改: ```brush:html [@ContentID][@1][@2]
{$htmlContent}
ID标题添加时间
``` 结果如下图所示: [![POPASP模板引擎移形换位功能](http://www.popasp.com/images/31/31_21_3.jpg "POPASP模板引擎移形换位功能替换")](http://www.popasp.com/images/31/31_21_3.jpg "POPASP模板引擎移形换位功能替换") 从上图中可以看,只进行了一次输出,而且没有在原位立即输出。 ### 实现原理 移形换位是个好听的名字,它的本质就是内存存储。其原理就是将解析后的html代码保存到了POP_MVC.tpl_vars这个Dictionary对象中,下次使用时即可用这个变量(键名)来使用。 块标签的内存缓存还有个特点是,它认准的是变量名,而不是具体的代码块。比如 ```brush:html flow块标签在随后会讲到, 此处可以把它简单理解为一个单纯的块标签, 目的只是将代码封闭
块标签都使用了block名, 这儿的内容还被输出到网页吗? 答案是否定的。 ``` [![POPASP模板引擎移形换位功能](http://www.popasp.com/images/31/31_21_4.jpg "POPASP模板引擎移形换位功能实现原理")](http://www.popasp.com/images/31/31_21_4.jpg "POPASP模板引擎移形换位功能实现原理") 内存存储是即时性的,一次页面输出后,它就会被销毁,如果要长时间保存,那就要使用到文件缓存。 ### 块标签多层嵌套时的内存存储 块标签的多层嵌套,也可以使用内存存储,由于这方面的使用较少,故不再举例。