我们可以设置一个虚拟的栏目,此栏目中并不实际发布内容,它的内容是从第三方数据库中取得的。这就面临几个问题:如何构建内容列表,如果显示内容列表。如何打开指定的某个内容。如果对内容进行过滤检索。如何显示单项内容。下面一一详述。
如何构建内容列表
从第三方获取数据,系统支持两种方式:

如何显示内容列表
第三方数据内容是不确定的,那么要显示这个列表,就需要结合栏目的列表样式中的FreeMaker模板来定义显示样式,这样就能灵活地显示任意的数据。如下图示例:
| 示例: | 模板代码: |
![]() |
<#setting number_format="#"> <table border=0 width="100%" cellspacing=0 cellpadding=2> <#list newslist as news> <tr> <td style='border-bottom:1px dotted #00a0f0; ' nowrap> ${news_index+1+ (page-1)*countperpage }</td> <td style='border-bottom:1px dotted #00a0f0; '> <a href="viewnews.jsp?subjectid=${subjectid}&id=${news.primarykey.id}" target="_blank"> ${news.showname} ${news.name}</a> </td> </tr> </#list> </table> |
如何打开指定的某个内容
点击内容列表中的某项时,如果为它指定了一个超链接,那么该超链接负责对应内容的显示。本系统使用 viewnews.jsp来显示新闻内容,同时它也能用来显示指定的内容。整个过程是这样的:
1 定义单项数据取数的SQL(如下图,注意红色显示的提示信息):
2 在栏目的列表样式中使用FreeMaker 模板来定义内容列表,如上图2, 指定超链接到 viewnews.jsp中,特别注意参数部分(图2中绿色荧光部分):
viewnews.jsp?subjectid=${subjectid}&id=${news.primarykey.id}
其中${subjectid}是指代栏目的ID, id=${news.primarykey.id} 表示的是主键字段名为id 它的值是 news.primarykey.id 假如某个数据源定义中主键是两个字段的组合键(假设为 id,name ) ,那么其中链接地址就应该类似于:viewnews.jsp?subjectid=${subjectid}&id=${news.primarykey.id}&name=${news.primarykey.name}
在使用FreeMaker模板一文中我们知道,可以使用 news.字段名 来访问其中字段的数据,为什么这里要用 news.primarykey.id这样的格式访问id字段呢。这是因为当字段为字符型或日期型时,把这们的数据拼接到URL地址上,可能会丢失数据或数据失真。因此需要将数据进行编码后再使用。因此 news.字段名可以访问字段的数据, 而news.primarykey.字段名访问的则是进行编码后的数据。但是news.primarykey.字段名仅能访问定义为主键的字段的数据。
3 在新闻显示设置页中定义新闻内容使用指定的FreeMaker模板来排版

上面是最简单的情况,即列表由一个Select语句返回,具体的内容也是使用相同的Select并通过定义的主键进行检索返回。对于单项数据的来源,我们还可以使用二次开发脚本来获取,如下图:

其中完整的脚本如下:
function getNewsDetailData(param)
{
var ret={};
var ds=newDataStore('', "select * from news_user where id="+param.id);
ds.retrieve();
ret.id=ds.getInt(0,"id");
ret.name=ds.getString(0,"name");
ret.showname=ds.getString(0,"showname");
ret.mobile=ds.getString(0,"mobile");
ret.officetel=ds.getString(0,"officetel");
return ret;
}
其中注意如下几点: