关于页面动态布局实现方案(三)
页面ID布局ID布局开始模板布局结束模板布局序号100001100001100001100001布局ID模块ID模块对应的模板模块序号100001100001<#list layoutList as layout> <#include layout.布局开始模板 /><#/list>
?
这样就动态引入的所有布局,然后在每种布局对应的ftl模板页面可以这么写
FreeMarker的强大之处在于:在通过include引入的子页面,仍然可以使用父页面的变量,比如此处的? layout
<#-- 此处的layout是引用父页面的变量 --><#list layout.moduleList as module> <#include module.模块对应的模板 /></#list><#-- 不要忘了把模板的结束标签加进来 --><#include layout.布局结束模板 />
?通过这种方式,就能把用户定制的页面加载出来,处理起来很方便,不需要开发人员做过多的判断!
但是:这种情况下,仅仅是把布局、模块“长什么样子”加载出来了,每个模块对应的业务内容还没出来呢!!!
比如 公告资讯模块,用户添加了两个,而这两个模块对应的ftl模板文件肯定是同“一个”!
既然是“一个”模板文件,自然只适合输出一个模块的内容,那“同一种模块”,添加多个的情况下,就不好输出了!!!
?
针对这种情况,如果不想把数据和模板绑定到一起,那就在页面加载完之后,使用 ajax 的方式,去请求每个模块对应的业务内容
当然你也可以实现FreeMarker的TemplateModel接口,针对每种模块,定制一个方法,只要传入模块ID:根据模块ID去查询对应的业务内容即可
?
?
?
?
?
?
?
?
?
?