二、理解CMS5的信息内容结构
CMS5中,Content(内容)是抽象的内容类型,Content包含标题、正文、图片等等通用属性。各种具体的内容类型都由Content派生,比如 Article(文章)、 Product(产品), 内容条目总是属于这些具体的内容类型;特别地,在CMS5中,Column(栏目)也是一种Content。这些由 Content 派生的具体内容类型包含 Content 的各种属性,同时又拥有各自不同的一些属性。Article类型还一些扩展类型,这些扩展类型只使用Article的部分或全部属性,且属性的含义是自定义的。
在模板设计中,除Column外的所有其他类型内容都使用基本的Content类型来访问,但不同类型的内容,其属性不同,模板编辑者要注意所引用的属性是否确实是当前对象的属性。
Column(栏目) 是 CMS5 中最特殊的内容类型,是网站总体布局的基础:Column 可以包含下级Column, 下级Column可以包含更下级的Column, 由此构成树形的栏目结构。任何内容都属于某个具体的 Column。某个具体的 Column 只能容纳一种类型的内容,也就是说,一个栏目要么是 Article 的栏目,要么是 Product 的栏目。
栏目树根下的一级栏目代表一个网站,虽然网站(一级栏目)的属性构成与其他栏目一致,但某些属性有特殊的含义。
内容的属性中,像标题、正文这样的属性比较简单,输入什么就显示什么。图片属性稍为复杂,其本身为图片文件的相对路径。URL属性比较复杂,由系统解析模板设置产生。 一般属性通过get()方法获得属性值,URL属性还可通过getURL()方法获得。
所有Content(包括Column)都具有以下属性(其中带*号的属性的含义可以被Article扩展类型自定义使用):
XID 整型 内容的ID
XTITLE* 串型 内容的标题
XSUMMARY* 串型 概述
XCONTENT* 串型 正文
XICON 图片型(串型) 小图
XIMAGE 图片型(串型) 大图
XHITCOUNT 整型 内容点击数
XCANREVIEW 整型 是否可评论,1为可评论
XCREATEDATE 日期(整型) 创建时间
XLASTMODIFYDATE 日期(整型) 最后修改时间
XPUBLISHDATE 日期(整型) 发布时间
XCREATER 串型 创建者
XLASTMODIFYER 串型 最后修改者
XPUBLISHER 串型 发布者
XFID 整型 所在栏目的栏目ID
XORDERCODE 整型 排序码
XREFRENCEID 整型 引用内容的ID
XFREEUSE1* 串型 自定义域
XFREEUSE2* 串型 自定义域
XFREEUSE3* 串型 自定义域
XFREEUSE4* 串型 自定义域
XFREEUSE5* 串型 自定义域
XFREEUSE6* 串型 自定义域
XFREEUSE7* 整型 自定义域
XFREEUSE8* 整型 自定义域
XFREEUSE9* 浮点型 自定义域
XFREEUSE10* 浮点型 自定义域
XFREEUSE11* 串型 自定义域 系统保留
XFREEUSE12* 串型 自定义域 系统保留
XFREEUSE13* 串型 自定义域 系统保留
XFREEUSE14* 串型 自定义域 系统保留
XFREEUSE15* 串型 自定义域 系统保留
XTYPE 串型 内容类型,column/article及其扩展类型/product
Column有以下属性:
XCODE 串型 英文简写
XPATH 串型 英文简写构成的栏目路径(从一级栏目到本级栏目)
XEDITOREMAIL 串型 编者邮箱
X_URL 串型 访问该栏目的URL
Article(通过Content类型访问)有以下属性:
XARTICLETYPE 串型 文章类型,text/file/url
XURL* 串型 文章类型为url时,存放URL
XKEYWORDS 串型 关键字
XSOURCE* 串型 来源
XSOURCESITE* 串型 来源网站域名
Product(通过Content类型访问)有以下属性:
XPRICE 浮点型 价格
对于网站(一级栏目)的Column类型属性,已经被系统定义为特殊用途的有:
xsummary 版权说明,内容用于页面末尾的版权说明
xcontent 网站简介,未特别指定,可用于网站logo,网站题图的alt显示
xicon 网站logo
ximage 网站题图,也可以是flash
对于所有Column类型(含一级栏目)的属性,已经被系统定义为特殊用途的有:
XFREEUSE11 栏目关键字,用于,栏目网页的 Keywords META
XFREEUSE12 栏目说明,用于栏目网页的 Description META,对于网站也可用于网站logo,网站题图的alt显示
XFREEUSE13 允许在该栏目在线发布的角色的角色 ID。如为-1,则所有人都可发布;默认为空,则该栏目不支持在线发布
XFREEUSE14 允许在该栏目在线投稿的角色的角色ID。如为-1,则所有人都可投稿;默认为空,则该栏目不支持在线投稿
XFREEUSE15 该栏目允许浏览的角色的角色ID。默认为空,则所有人都可浏览,即普通开放栏目。
对于所有Article类型的Content,已经被系统定义为特殊用途的属性有:
XFREEUSE13 在线发布/投稿该内容的用户的ID
XFREEUSE14 在线发布/投稿该内容的用户的用户名
XFREEUSE15 该内容允许浏览的角色的角色ID。默认为空,则所有人都可浏览,即普通内容。
CMS5中,除了代表单个内容的Content、单个栏目的Column外,还有一些代表内容列表的类。这些类都可以使用next()来遍历列表中的每一个对象,用get()方法获得具体对象的属性。目前版本内容遍历只能一次,不能回退。
Columns类,代表栏目列表。Column.getSubColumns()可以获得某栏目下的所有已发布子栏目的列表;Column.getSupperColumns()可以获得某栏目的所有上级栏目的列表(上到根栏目,下到本栏目);当Columns遍历到某个具体栏目时,也可以通过Columns.getSubColumns()取得该具体栏目的子栏目列表。
Contents类,代表具体栏目所包含内容的列表。Column.getContents()可以获得某栏目下的所有已发布内容的列表,Columns.getContents()也一样,只是Columns要先遍历到某个具体栏目。
Photos类,代表图片集类型的内容所含的所有图片。Content.getPhotos()可以获得某内容(类型为图片集)的所有图片。
PageContents类,代表具体栏目所包含内容的列表的一部分,即一页(内容太多时需要翻页显示)。由Column.getPageContents()取得,具体的页码由 URL 中的 page参数指定。
SearchContents类,代表全文检索出来的内容的列表的一页。由cms.search(关键字)获得。
PageResultSet类,代表结果集中的一页,用于翻页功能。可通过cms.queryPage(sql,pageSize),cms.getReviews(内容ID,pageSize)获得。getReviews获得某内容的所有评论(评论是独立的对象,不是内容的一种)中的一页。
PageContents、SearchContents、PageResultSet三个类都可以通过getPageLinks()取得完整的到其他页的链接的HTML代码,因此模板开发人员不需要了解翻页控制的细节。
八、内容访问API JavaBean 使用参考
public class CMSBean extend Object
CMSBean是CMS5前端模板的总入口,所有数据对象由它而来。
Column getSite()
获取当前URL中cid参数指定的内容(含栏目)所在的“网站”,即栏目树中的一级栏目。
Column getSite(long cid)
获取cid参数指定的内容(含栏目)所在的“网站”,即栏目树中的一级栏目。
Content getContent()
获取当前URL参数指定的内容。内容可能是各种类型(但不包括栏目),其中差别为可访问的属性集合不同。如果内容是个引用,则直
接返回被引用的内容。
返回值:内容。
Content getContent(long cid)
获取指定的内容。其他同getContent()。
参数: cid--内容的ID。
返回值:内容。
Column getColumn()
获取当前URL参数指定的栏目。
返回值:栏目。
Column getColumn(long cid)
获取指定的栏目。
参数: cid--栏目的ID。
返回值:栏目。
String include(String path,String enc)
动态读入外部文本文件,一般为HTML,用于动态嵌入HTML代码。
参数: path--外部文件的路径,以“/”开头,相对于www根的路径。enc--外部文件的编码,如gbk、utf-8。
返回值:文件的文本内容。
String includeSurvey(int surveyID)
动态嵌入指定id的调查
String includeAD(int adID)
动态嵌入指定id的广告
public String includeContent(int cid)
动态嵌入指定id的内容
public String includeURL(String url,,String enc)
动态嵌入指定url的内容。url可以是相对当前路径的路径,也可以是以“/”开头的相对与www根的路径,或者以http://开头的本服务器或外部服务器路径。
String[] simpleSearch(String word)
全文检索内容。
参数: word--关键字。
返回值:所有命中内容的id数组。
SearchContents searchAll(String word,int pageSize)
全文检索内容。查找所有栏目下的所有类型的内容。
参数: word--关键字。pageSize每页行数。
返回值;检索命中内容列表,带翻页功能,详见SearchContents。
SearchContents searchByType(String word,int pageSize,String type)
同上,按类型全文检索。查找所有栏目。
参数 type 为内容类型,如article、product等。
SearchContents search(String word,int pageSize,String xtype,Column column,boolean withSubs)
同上,按类型及栏目全文检索。
参数 column指定栏目对象,withSubs指定是否检索下级栏目。
SearchContents searchTitle(String word,,int pageSize,String xtype,Column column,boolean withSubs)
同上,按类型及栏目全文检索,只搜索标题。
参数 column指定栏目对象,withSubs指定是否检索下级栏目。
String addReview(long contentID,HttpServletRequest request)
新增对某内容的评论,请求中应包含content(评论内容)及author(作者)信息,一般来自提交请求页面的表单。
参数: contentID--内容id,request--当前的HttpServletRequest。
返回值: 错误信息,如执行正确,返回null。
String addReview(long contentID,String review,String author)
新增对某内容的评论。
参数: contentID--内容id,review--评论内容,author--作者。
返回值: 错误信息,如执行正确,返回null。
PageResultSet getReviews(long contentID,int pageSize)
取对某内容的评论。
参数: contentID--内容id。pageSize每页行数。
返回值:评论列表,带翻页功能,详见PageResultSet。
public Contents getRelativeContent(Content content)
取某内容的相关内容,目前仅对Article类型的内容有效,其他内容返回null。
参数: content--要相关的内容。
返回值: 相关内容列表,详见Contents。
public PageResultSet queryPage(String sql,int pageSize)
查询并获得分页的结果集,指定每页行数,并从当前URL获得页码
public PageResultSet queryPage(String dataSource,String sql,int pageSize)
查询并获得分页的结果集,指定数据源、每页行数,并从当前URL获得页码
public WebResultSet query(String sql)
查询并获得结果集
public WebResultSet query(String sql,int maxRows)
查询并获得结果集,并指定最大行数
public WebResultSet query(String dataSource,String sql)
查询并获得结果集,并指定数据源
public WebResultSet query(String dataSource,String sql,int maxRows)
查询并获得结果集,并指定最大行数、数据源
public void updateContentHitCount(long contentID)
更新内容的访问计数,仅用于url中不含cid参数的页面。
public class WebResultSet implements ResultSet
WebResultSet 是所有内容对象、评论对象、检索结构对象的公共父类,其所有方法对这些对象都适用。 WebResultSet 是java.sql.ResultSet的Web风格实现,除具备 ResultSet 的所有方法外,扩展了一些新的取字段属性的方法;此外 WebResultSet 默认最大限制5000行的遍历,也可以指定最大行数。
String get(String pName)
同getProperty(String pName)。
String get(String pName,int maxLength)
同get(String pName),但限定最多返回的字符数。
String getProperty(String pName)
按属性名取属性值。特别地:如果属性是"xicon"、"ximage",返回的是完整的<IMG>html代码;如果属性是"xpublishdate"、"xlastmodifydate"、"xcreatedate",返回的是年-月-日。
参数: pName--属性名。
返回值:属性值。对不存在的属性,返回空串。
long getIntProperty(String pName)
取整数型的属性。
参数: pName--属性名。
返回值:属性值。
String getDateProperty(String pName,String formatStr)
取毫秒值表示的时间属性,如"xpublishdate"、"xlastmodifydate"、"xcreatedate",按指定的格式化串返回日期时间格式。
参数: pName--属性名。formatStr--格式化串,“年-月-日”为"yyyy-MM-dd",“年-月-日 时:分:秒”为"yyyy-MM-dd hh:mm:ss"。
返回值:格式化后的属性值。
String getDateProperty(String pName)
返回格式为“年-月-日”的时间属性。对"xpublishdate"、"xlastmodifydate"、"xcreatedate",可简写为get(String pName)。
参数: pName--属性名。
返回值:格式化后的属性值。
String getImageProperty(String pName)
返回完整的<IMG>html代码的图片属性,对"xicon"、"ximage",可简写为get(String pName)。
参数: pName--属性名。
返回值:图片属性的html代码。
String getImagePathProperty(String pName)
返回图片路径。
参数: pName--属性名。
返回值:图片路径,相对于www根的路径。
public boolean userCanAccess(HttpServletRequest request)
判断用户是否可以访问内容。按用户角色及栏目/内容的设置来计算。
String parse(String template)
用指定的“属性模板”绑定当前数据,输出HTML代码。“属性模板”为包含内容属性引用的HTML代码,其中的属性引用写成“{属性名}”。 该方法用于Column、Content等单数对象。
参数: template--“属性模板”。
返回值:绑定数据后的HTML代码。
String parseMulti(String template)
同parse(String template),但输出多行HTML,但适用于Columns、Contents、PageContents、PageResultSet、SearchContents等复数对象。
参数: template--“属性模板”。
返回值:绑定数据后的HTML代码。
String parseMulti(String template,String curID)
同parseMulti(String template),但可以对curID指定的行进行特殊处理:对于格式为“{[HTML代码]}”的部分,在解析时只有curID指定的行才被保留。一般用于在兄弟栏目列表中突出显示当前栏目。
参数: template--“属性模板”。curID--特殊显示的行的内容ID。
返回值:绑定数据后的HTML代码。
String parseMulti(String template,int maxRow)
同parseMulti(String template),但可以指定最多显示的条目数,超出的条目被忽略。
参数: template--“属性模板”。maxRow--最大条目数。
返回值:绑定数据后的HTML代码。
public class Content extends WebResultSet
除Column之外的所有类型内容都通过共同的Content类来访问,不同类型的内容,其属性集合略有不同,参见第二章。Content是WebResultSet的子类,拥有所有WebResultSet的方法。
long getID()
取内容的ID。一般只用于程序中。用于显示时,等同于get("XID"),但返回的是整型。
参数:
返回值:整型的内容ID。
Content getRefer()
取该内容所引用的内容。
参数:
返回值:所引用的内容
Column getColumn()
取该内容所在的栏目。
参数:
返回值:栏目对象。
Column getURL()
取该内容的URL。
参数:
返回值:URL。
public boolean userCanEdit(HttpServletRequest request)
判断用户是否可以在线编辑内容。投稿用户及系统管理员及在线维护者角色(9710)可以。
public class Column extends Content
代表一个具体栏目。Content是Content的子类,拥有所有Content的方法。
public String getURL()
取访问该栏目的URL,效果同getProperties("X_URL")。
参数:
返回值: URL。
public Columns getSuperColumns()
取所有上级栏目(包括本栏目),自上而下排序
参数:
返回值: 栏目列表对象。
public Columns getSubColumns()
取所有子栏目。
参数:
返回值: 栏目列表对象。
public Columns getSubColumns(String orderBy)
取所有子栏目,按指定的属性排序。
参数: orderBy--排序属性,见栏目属性列表
返回值: 栏目列表对象。
public Contents getContents()
取栏目下的所有内容。顺序为早的在前。
参数:
返回值:内容列表对象。
public Contents getContents(String orderBy)
取栏目下的所有内容,按指定的属性排序。
参数: orderBy--排序属性,见内容属性列表,注意不同类型的内容,属性不同。
返回值: 内容列表对象。
public Contents getContents(int rows)
取栏目下指定行数的最新内容。
参数:
返回值:内容列表对象。
public PageContents getPageContents()
取栏目下所有内容用于翻页显示。getPageContents自己会根据URL中的page参数确定返回那一页数据,模板开发者不需要关心翻页的细节。
参数:
返回值: 一页内容列表对象。
public PageContents getPageContents(String orderBy)
取栏目下所有内容用于翻页显示,按指定的属性排序。
参数: orderBy--排序属性,见内容属性列表,注意不同类型的内容,属性不同。
返回值: 一页内容列表对象。
public PageContents getPageContents(int pageSize)
public PageContents getPageContents(String orderBy,int pageSize)
public String getPublishAuth(HttpServletRequest request)
取用户的投稿、发布权限。 能发布返回"PUBLISH",能投稿返回"CONTRIBUTE",都不能返回null。
按用户角色及栏目设置来计算。
public class Columns extends WebResultSet
Columns代表一组栏目(但不是一组Column对象,Columns类和Column类没有继承或引用关系)。使用时,Columns通过next()移动到具体的的某个栏目,然后通过getProperties()、getURL()等方法获得该栏目的属性,通过getSubColumns()、getContents()等方法获得该栏目的子栏目列表和内容列表。
public boolean next()
在一组栏目中,移动到一个可用的栏目。 在没有调用next()之前,调用Columns的getXXX方法是无效的(除getSimpleLinks外)。
参数:
返回值: 是否存在下一个可用栏目。
public long getID()
移到某栏目后,取该栏目的ID。一般只用于程序中。用于显示时,等同于get("XID"),但返回的是整型。
参数:
返回值:整型的栏目ID。
public String getURL()
移到某栏目后,取该栏目的链接地址。等同于get("X_URL")。
参数:
返回值: URL。
public Columns getSubColumns()
移到某栏目后,取该栏目所有子栏目。
参数:
返回值: 栏目列表对象。
public Columns getSubColumns(String orderBy)
移到某栏目后,取该栏目所有子栏目,按指定的属性排序。
参数: orderBy--排序属性,见栏目属性列表
返回值: 栏目列表对象。
public Contents getContents()
移到某栏目后,取该栏目下的所有内容。
参数:
返回值:内容列表对象。
public Contents getContents(String orderBy)
移到某栏目后,取该栏目下的所有内容,按指定的属性排序。
参数: orderBy--排序属性,见内容属性列表,注意不同类型的内容,属性不同。
返回值: 内容列表对象。
public Contents getContents(int rows)
移到某栏目后,取栏目下指定行数的最新内容。
参数:
返回值:内容列表对象。
public String getSimpleLinks()
产生简单的所有栏目链接html代码,一般用于测试。
public class Contents extends WebResultSet
Contents代表一组内容(但不是一组Content对象,Contents类和Content类没有继承或引用关系)。使用时,Contents通过next()移动到具体的某个内容,然后通过getProperties()、getURL()等方法获得该内容的属性。该类一般用于输出内容链接列表,但也可用于输出内容信息体的列表。
public boolean next()
在一组内容中,移动到一个可用的内容。 在没有调用next()之前,调用Contents的getXXX方法是无效的(除getSimpleLinks外)。
参数:
返回值: 是否存在下一个可用内容。
public long getID()
移到某内容后,取该内容的ID。一般只用于程序中。用于显示时,等同于get("XID"),但返回的是整型。
参数:
返回值:整型的内容ID。
public String getURL()
移到某内容后,取该内容的链接地址。等同于get("X_URL")。
参数:
返回值: URL。
public String getSimpleLinks()
产生简单的所有内容链接html代码,一般用于测试。
public class PageContents extends Contents
和Contents一样代表一组内容,但只有一页。用于内容很多时的翻页。具有Contents的所有方法,可以和Contents一样地被使用,要显示翻页链接时,调用getPageLinks()。
public String getPageLinks()
得到翻页链接的HTML代码。
public int getRowCount()
得到总行数(不单是本页)。
public class SearchContents extends WebResultSet
和PageContents基本一样,PageContents是一个栏目下的翻页文章列表,SearchContents是CMSBean.search()方法查找出来的翻页文章列表,来自不同的栏目。SearchContents具有和PageContents相同的 方法。
public String getContentHead()
得到内容的xcontent域的值的开头文本,字符数由CONTENT_HEAD_LEN常量指定。
public class PageResultSet extends WebResultSet
带翻页功能的结果集。 PageResultSet 是CMSBean.queryPage(sql,pageSize)方法,CMSBean.getReviews(contentID,pageSize)方法取出来的。
public int getRowCount()
得到总行数(不单是本页)。
public String getPageLinks()
得到翻页链接的HTML代码。
public boolean next()
移到下一个记录。
public class Photos extends WebResultSet
每个图片集类型的内容content,可以通过content.getPhotos()得到该内容的图片集合。图片集合中的每个图片,具有属性:XTITLE-图片标题;XDESCRIPTION--图片概述。此外,还可以通过以下方法得到图片的其他信息。
public String getIconPath()
取缩略图文件路径,该路径可以作为<IMG>元素的src属性值。缩略图可用于显示图片集所含图片的概览视图。
public String getImagePath()
取图片文件路径,该路径可以作为<IMG>元素的src属性值。
public int getSizeKB()
取图片的字节大小,单位为KB。
public String getWidthHeight()
取图片的长、宽尺寸。格式为 “width x height”,如“1024 x 768”。
public String getWidthOrHeightLimit(int maxSize)
将图片用于<IMG>元素显示时,如果限制最大的显示长、宽尺寸,同时保持图片自身的长宽比,则可以用本方法取合适的<IMG>的长宽属性,返回格式如:“width=800 height=600”。
CMS5内容实体访问Bean之间的继承关系
WebResultSet--->Content--->Column
|-->Contents-->PageContents
|-->Columns
|-->PageResultSet
|-->SearchContents
|-->Photos