首先说明,这种方式不是通过hiberneter*来查数据库,而是直接通过sql语句去查询数据库,目的就是实现用户自定义sql语句,自定义其中的参数,去查询任何表,包括用户新建的表。
要点:
1、新建一个表,用来保存用户自定义标签的查询语句及参数,用户能在后台管理,具体如何操作请参考动易如何后台自定义标签;
2、新建一个专用的Freemarker标签,专门用来处理用户自定义标签,用户在模板里这么调用:
[@cms.标签名 method=” 用户自定义标签的名称” style=”模板样式” ]
3、新建一个专门的tag_*****.html 的标签模板,专门存放用户自定义标签的样式。因为你们的模板机制,好像每个jeecms自定义标签都对应于唯一的一个模板。而种方式需要给用户处理不同的自定义标签(这里是指按我这方式的标签)。所以这个tag标签模板里,用户需这么定义:
[#if style=”1”]
[#elseif style=”2”]
[#list list as item] ${item[0]} [/#list]
[#elseif style=”3”]
[#elseif style=”4”]
[#elseif style=”5”]
[/#if]
这里由于不是用*,所以就用 ${item[0]} 这种方式,用户要显示哪个数据,在哪个位置,让他自己去识别就是。
具体如下:
新建一个UserLabel表,保存用户自定义数据:
字段 数据
自定义标签名 GetMyNews
查询语句 select top 10 from myNews
参数 [type,1][author,‘korven’]
是否分页 0
新建了一个
<#macro CommLabel ....... </#macro>
在源代码里相应的DaoImpl中,写对应方法,根据CommLabel 里传过来的method参数,去查找对应的自定义sql语句,并将里面的参数处理,整合成一个完整的sql语句,执行,并返回list对象
在tag_***.html模板中 style="2" 里写入对应的html代码。
调用:在模板中
[@cms.CommLabel method=” GetMyNews” style=”2” ]
过程就是上面这样了,肯定能实现的。希望3.0能加上这个功能,这样才能跟主流的cms有得比。
还可以另外多定义几个这样的标签,如
[@cms.CommAjax method=” GetMyNews” style=”2” ] 返回ajax数据
[@cms.CommXml method=” GetMyNews” style=”2” ] 返回Xml数据
[@cms.CommJson method=”GetMyNews” style=”2” ] 返回Json数据
.......
祝jeecms越来越强大!!! |
|