RS语句用于读取指定栏目或SQL数据。RS语句可以嵌套使用RS、ATTACH、MAP和JAVA语句。
注意:在应用SQL直接读取数据库时,BLOB、JAVA_OBJECT、LONGVARBINARY、VARBINARY、STRUCT、REF、DATALINK、LONGVARCHAR、OTHER、DISTINCT数据不被支持,将被跳过且返回NULL。
<rs id=(id:STRING) sql=(sql:STRING) topic=(topic:STRING) where=(where:string) orderby=(orderby:string) from=(from:int) rows=(rows:int) page=(page:int) style=(style:String)>
--在此写入你的正文内容
</rs>
一旦sql或topic出现,其必须在id之后,在from、rows、page、style、where、orderby之前。
| 参数名 | 类型 | 含义 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | STRING | 必须。该RS的唯一号。必须以字母或下划线开头。 | ||||||||||||||||||||
| sql | STRING |
要执行的SQL查询语句。 可选。如果没有指定,默认为topic选项,topic取值为当前模板所在的栏目。 如果需要包含上下文中出现的字段或者JAVA字符串,应使用<%=开头,并使用%>封闭,在JAVA字符串中可以直接使用正文标签和全局标签以及上下文定义的变量。下面样例说明了如何按产品查询其销售情况。 <rs id="rs1" sql="select productid,productname from product"> <$rs1.productname$> <rs id="rs2" sql=<%="select customer from sales where productid=" + <$rs1.productid$>%>> <$rs2.customer$> </rs> </rs> |
||||||||||||||||||||
| topic | STRING |
要查询的栏目代号。在该RS段中可以引用正文标签和附件标签,但注意要加上该RS段的ID号。 可选,如果SQL和topic都没有指定,系统将取值为根据当前上下文计算的当前模板所在栏目。 对于自定义数据源,仅读取指定栏目的文章;对于非自定义数据源,将读取指定栏目及其下级栏目的所有文章。 如果指定了topic="",表示读取当前栏目所属站点的所有非自定义数据源文章。 例如有栏目名称为news, <rs id ="rs1" topic="news"> <$rs1.name$> </rs> |
||||||||||||||||||||
| where | string |
可选,仅在指定topic(或sql和topic均未设定)时有效。where语句将出现在以下SQL语句红色标注的where_clause中。 自动排序栏目的SQL如下: 1)对于非自定义数据源文章的SQL语句如下: select a.*,b.name uname,c.name deptname,d.name unitname from article a,users b,dept c,unit d,topic e where a.topic=e.id and b.dept=c.id and c.unit=d.id and a.creator=b.id and (e.code ='<$top_code$>' or e.code like '<$top_code$>.%') and a.state=3 and a.siteid='<$site_id$>' and (where_clause) order by orderby_statement 2)对于自定义数据源的SQL语句如下: select b.*,a.title,a.siteid,a.topic,a.state,a.createdate,a.publishdate from <$custom_table$> b,<$custom_table$>_prop a where a.state=3 and b.id=a.id and a.topic='<$top_id$>' and (where_clause) order by orderby_statement 手工排序栏目的SQL如下: select a.* from article_sort a where a.state=3 and a.siteid='<$site_id$>' and a.topic='<$top_id$>' and (where_clause) order by orderby_statement |
||||||||||||||||||||
| orderby | string |
可选,表示排序方法。SQL语句参加where子句说明。 自动排序栏目的默认排序: 对于非自定义数据源文章的排列默认按重要度和发布日期降序排列,即orderby="a.important desc,a.publishdate desc"。 对于自定义数据源,默认按发布日期降序排列。即orderby="a.publishdate desc"。 手工排序栏目默认按手工排列。即orderby="a.idx,a.publishdate desc" |
||||||||||||||||||||
| from | int | 可选,从第X条开始读取数据。默认从0开始计数。 | ||||||||||||||||||||
| rows | int | 可选,共取X条。不填读取剩余的所有数据。 | ||||||||||||||||||||
| page | int | 可选,分页数。达到该条数后,系统将自动分页。 | ||||||||||||||||||||
| style | String |
可选,分页导航条样式。只有在page设置时有效,取值如下。如果RS语句设置了page参数,缺省的style样式是modern。 css文件样例请参考/css/pagebreak.css进行定义,缺省的样例参看下图。
|
在模板需要定制的位置前(一般是RS语句前),嵌入JAVA语句。
注意:
1.建议是一次定义整组变量,而不是一个。
2.%1$s用于表示参数。%1$表示第一个,%2$表示第二个;s表示是字符串,d表示是数字。所以,%1$s表示第一个参数格式化为字符串显示,%1$d表示第一个参数格式化为数字显示。具体可以参照String.format()函数的说明。
3.如果仅仅是调整CSS样式,请参见/css/pagebreak.css样例进行调整。
例如,以下定义导航栏不清除样式,英文导航,并且显示当前链接,但是没有合计信息和下拉选择框导航。
<%
PAGEBREAK_HEADER = "<div class='pagebreak_modern'>";
PAGEBREAK_PREVPAGE = "<span class='prevpage'><a href='%1$s'>Previous</a></span>";
PAGEBREAK_NEXTPAGE = "<span class='nextpage'><a href='%1$s'>Next</a></span>";
PAGEBREAK_SKIP = "<span class='omit'>...</span>";
PAGEBREAK_PAGE = "<span class='page'><a href='%1$s'>%2$s</a></span>";
PAGEBREAK_CURRENTPAGE = "<span class='currentpage'><a href='%1$s'>%2$s</a></span>";
PAGEBREAK_TOTAL = null;
PAGEBREAK_SELECTBOX = null;
PAGEBREAK_FOOTER = "</div>";
%>
| 变量 | 含义 | 缺省值 | 参数 |
|---|---|---|---|
| PAGEBREAK_HEADER | 页眉 | <div class='clear'></div><div class='pagebreak_modern'> | |
| PAGEBREAK_PREVPAGE | 前一页 | <span class='prevpage'><a href='%1$s'>上一页</a></span> | 链接地址 |
| PAGEBREAK_NEXTPAGE | 下一页 | <span class='nextpage'><a href='%1$s'>下一页</a></span> | 链接地址 |
| PAGEBREAK_SKIP | 省略符 | <span class='omit'>...</span> | |
| PAGEBREAK_PAGE | 页码 | <span class='page'><a href='%1$s'>%2$s</a></span> | 链接地址,页码(数字) |
| PAGEBREAK_CURRENTPAGE | 当前页 | <span class='currentpage'>%2$s</span> | 链接地址,页码(数字) |
| PAGEBREAK_TOTAL | 合计信息 | <span class='total'>共%2$d页</span> | 总记录数,总页数,每页条数,当前页码 |
| PAGEBREAK_SELECTBOX | 下拉选择框 | <select class='page_select' onchange='javascript:window.location=this.value'> | |
| PAGEBREAK_FOOTER | 页脚 | </div> |
| 变量 | 含义 | 缺省值 | 参数 |
|---|---|---|---|
| PAGEBREAK_HEADER | 页眉 | <div class='clear'></div><div class='pagebreak_onebyone'> | |
| PAGEBREAK_PREVPAGE | 前一页 | <span class='prevpage'><a href='%1$s'>上一页</a></span> | 链接地址 |
| PAGEBREAK_NEXTPAGE | 下一页 | <span class='nextpage'><a href='%1$s'>下一页</a></span> | 链接地址 |
| PAGEBREAK_SKIP | 省略符 | ||
| PAGEBREAK_PAGE | 页码 | <span class='page'><a href='%1$s'>%2$s</a></span> | 链接地址,页码(数字) |
| PAGEBREAK_CURRENTPAGE | 当前页 | <span class='currentpage'>%2$s</span> | 链接地址,页码(数字) |
| PAGEBREAK_TOTAL | 合计信息 | 总记录数,总页数,每页条数,当前页码 | |
| PAGEBREAK_SELECTBOX | 下拉选择框 | ||
| PAGEBREAK_FOOTER | 页脚 | </div> |
| 标签名 | 类型 | 含义 |
|---|---|---|
| rowno | int | 当前行号 |
1.标签以<$开头,$>结尾定义。
2.标签以RS的ID号作为前缀进行引用,例如<$rs1.productname$>。注意:ID大小写应与定义中的形同,后面变量不区分大小写。
3.rowno标签表明当前行号,为整数。例如<$rs1.rowno$>。
4.RS语句中采用了topic参数的,可以加上RS的ID号作为前缀引用正文标签。对于自定义数据源,正文标签仅限于<$art_id$>、<$art_title$>、<$art_url$>、<$art_createdate$>和<$art_publishdate$>
5.RS语句中可以嵌套ATTACH语句。对于自定义数据源,除非定制(例如产品管理),一般附件标签不起作用(也即没有任何数据)。
6.RS语句中采用了sql参数的,使用RS的ID号作为前缀加上字段名进行引用,字段名不区分大小写。
7.标签后面可以加括号紧跟格式化参数或字数限制条件,例如<$rs1.productname(50)$>。对于不同类型数据,其主要含义有:
1)字符串类型:
<$rs1.productname(50)$>表示取productname的前50个字符,中文字符算1个字符;
<$rs1.productname(50,"...")$>表示取productname的前50个字符,超出的最后追加...
2)数字类型,参见下表说明;
| 符号 | 位置 | 含义 |
|---|---|---|
0 |
数字 | 阿拉伯数字 |
# |
数字字 | 阿拉伯数字,如果不存在则显示为 0 |
. |
数字 | 小数分隔符或货币小数分隔符 |
- |
数字 | 减号 |
, |
数字 | 分组分隔符 |
E |
数字 | 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。 |
; |
子模式边界 | 分隔正数和负数子模式 |
% |
前缀或后缀 | 乘以 100 并显示为百分数 |
\u2030 |
前缀或后缀 | 乘以 1000 并显示为千分数 |
¤ (\u00A4) |
前缀或后缀 | 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 |
' |
前缀或后缀 | 用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o''clock"。 |
|
字母
|
日期或时间元素
|
表示
|
示例
|
|
G
|
Era 标志符
|
Text
|
AD
|
|
y
|
年
|
Year
|
1996; 96
|
|
M
|
年中的月份
|
Month
|
July; Jul; 07
|
|
w
|
年中的周数
|
Number
|
27
|
|
W
|
月份中的周数
|
Number
|
2
|
|
D
|
年中的天数
|
Number
|
189
|
|
d
|
月份中的天数
|
Number
|
10
|
|
F
|
月份中的星期
|
Number
|
2
|
|
E
|
星期中的天数
|
Text
|
Tuesday; Tue
|
|
a
|
Am/pm 标记
|
Text
|
PM
|
|
H
|
一天中的小时数(0-23)
|
Number
|
0
|
|
k
|
一天中的小时数(1-24)
|
Number
|
24
|
|
K
|
am/pm 中的小时数(0-11)
|
Number
|
0
|
|
h
|
am/pm 中的小时数(1-12)
|
Number
|
12
|
|
m
|
小时中的分钟数
|
Number
|
30
|
|
s
|
分钟中的秒数
|
Number
|
55
|
|
S
|
毫秒数
|
Number
|
978
|
|
z
|
时区
|
General time zone
|
Pacific Standard Time; PST; GMT-08:00
|
|
Z
|
时区
|
RFC 822 time zone
|
-0800
|
以下代码演示了读取当前栏目下所有文章。
<rs id="rs1">
<$rs1.art_title$>
</rs>
以下代码作用同上,也是读取当前栏目下所有文章。
<rs id="rs1" topic=<$top_code$>>
<$rs1.art_title$>
</rs>
以下代码演示了读取指定栏目中的重要度为非常重要的文章,按发布时间升序排列。
<rs id="rs1" topic=<$top_code$> where="a.important=2" orderby="a.publishdate">
<$rs1.art_title$>
</rs>
以下代码演示了读取栏目代号为top1的栏目下20篇文章。
<rs id="rs1" topic="top1" rows=20>
<$rs1.art_title$>
</rs>
以下代码演示了读取当前栏目下文章并以20条每页进行分页。
<rs id="rs1" page=20>
<$rs1.art_title$>
</rs>
以下代码演示了读取sql中前20行数据。
<rs id="rs1" sql="select productid,productname from product" rows=20>
<$rs1.productname$>
</rs>
以下代码演示了rs嵌套和sql中嵌入JAVA语句。其执行结果是读取product中数据并根据productid读取customer表数据
<rs id="rs1" sql="select productid,productname from product">
<$rs1.productname$>
<rs id="rs2" sql=<%="select customer from sales where productid=" + <$rs1.productid$>%>>
<$rs2.customer$>
</rs>
</rs>