内容类型二次开发
1.内容类型扩展
内容是ZCMS的核心,基于满足不同内容类型的展示方式,ZCMS提供了满足不同内容类型进行快速扩展的方式,继承通用内容功能,包括创建、修改、查询、删除、发布、置顶及工作流等。
下面是通过添加图书插件为例介绍内容类型的扩展开发基本内容。
1.1 添加内容类型
(1). 基于当前的ZCContent表不能满足图书通用的属性,需要创建其扩展表ZCBooksBody。
(2) 创建一个插件类,如下:
1 2 3 4 5 6 7 8 9 10 11 | public class BooksPlugin extends AbstractPlugin { public static final String ID="com.zving.books"; public void start() throws PluginException { } public void stop() throws PluginException { } } |
(3)创建相应的插件,指定引用的Plugin Class,依赖的插件,如下图:
(4)创建相应的内容类型扩展类型类BooksContentType.java,BooksContent.java继承AbsractContentType.java抽象类。AbsractContentType.java抽象类实现了内容类型需要的基本功能,继承它会大大加快程序员开发效率。相应代码展示如下图所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | public class BooksContentType extends AbstractContentType { public static final String TypeID="Books"; public static final String TypeName="图书"; public static final String DATAIMPORTIDKEY=new ZCBooksBody().table()+".ID"; public String getCatalogIcon() { return "icons/icon008a1.png"; } public String getCatalogName() { return TypeName; } public String[] getConfigURLList() { return new String[]{"contentcore/catalogBasic.zhtml","article/articleCatalogConfig.zhtml", "contentcore/contentMetadata.zhtml","contentcore/catalogBlock.zhtml"}; } public String getDataImpIdKey() { return DATAIMPORTIDKEY; } public String getDetailIcon() { return "icons/icon008a1.png"; } public String getDetailTemplateTypeID() { return BooksDetailTemplate.ID; } public String getID() { return TypeID; } public String getListTemplateTypeID() { return BooksListTemplate.ID; } public String getName() { return TypeName; } //设置内容编辑页面路径及参数 public String getEditorURL() { return "books/bookscontentDialog.zhtml?CatalogID={CatalogID}&ContentID={ID}"; } //设置内容快速编辑页面及参数 public String getQuickEditURL() { return "books/booksQuickEditor.zhtml?CatalogID={CatalogID}&ContentID={ID}"; } //设置内容选择页面路径及参数 public String getSelectorURL() { return "content/contentSelector.zhtml?ContentType="+BooksContentType.TypeID; } //设置内容列表页路径 public String getListURL() { return "books/bookscontentlist.zhtml"; } //设置有无扩展表,返回true有扩展表,返回false无扩展表 public boolean hasExtendTable() { return true; } //设置扩展表引用类,无扩展表返回null,有扩展表返回其指定扩展 表的类 public DAO<?> createExtendDAOInstance() { return new ZCBooksBody(); } public IContent newContent() { BooksContent bc=new BooksContent(); return bc; } } |
(5)图书插件中注册相应的图书类型,如下图所示:
(6)图书内容类型完成之后,切换菜单到管理工作台,新建栏目会出现如下图所示:
上图说明内容类型创建已经初步完成。
(7)切换菜单到文档工作台。由BooksContentType.java定义的图书类型展示列表页,快速编辑页面,以及新建内容页面等后,新建图书内容展示如下图所示:
默认支持所有内容的基本功能,包括新建、修改、删除、发布、待发布、置顶及推荐等功能。
2.创建内容类型的相关模板类型(列表页和详细页模板)
(1)创建图书内容类型列表页模板继承AbstractCatalogListTemplate,如下图所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class BooksListTemplate extends AbstractCatalogListTemplate { public static final String ID = "BookList"; public String getPluginID() { return BooksPlugin.ID; } public String getID() { return ID; } public String getName() { return "图书列表"; } } |
(2)创建图书内容类型详细页模板继承AbstractDetailTemplate,如下图所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class BooksDetailTemplate extends AbstractDetailTemplate{ public static final String ID = "BooksDetail"; public String getPluginID() { return BooksPlugin.ID; } public String getID() { return ID; } public String getName() { return "图书详细模板"; } public AbstractExecuteContext getContext(String dataID){ AbstractExecuteContext context=super.getContext(dataID); Mapx< String ,Object> map=context.evalMap("Content"); ContentExtendBL.dealContentExtendData(map); context.addDataVariable("BookDetail",map); return context; } } |
(3)打开插件配置文件,切换到Extends标签页,添加扩展服务项,如下图所示:
(4)创建完列表页及详细页模板类型后即可使用这两个模板类型创建相应的模板,只需要在模板第一行使用<z:config type=”BookList” name=”图书列表” />标签来定义列表页模板类型。详细页模板可以使用<z:config type=”BookDetail” name=”图书详细页模板” />,可通过定义BooksDetailTemplate中的getContext方法初始化上下文不同变量。
列表页可以通过内容循环标签<cms:content>输出内容列表:
1 2 3 4 5 6 7 8 | < cms:content catalogid = "${Catalog.ID}" contenttype = "${Catalog.ContentType}" level = "CurrentAndChild" page = "true" pagesize = "12" > < z:list > < div >< a data-cke-saved-href = "${Content.Link}" href = "${Content.Link}" >${Content.Title}</ a > < span style = "float:right" >${format(Content.AddTime,'yyyy-MM-dd')}</ span > </ div > </ z:list > </ cms:content > |
详细页可以通过${BookDetail.Title}取得相应的标题,其它属性也可以通过类似的方式取其相应的值。
至此,图书内容类型的扩展已经完成。我们可以在后台建立此类型的栏目,对栏目数据进行维护,支持包括全文检索、工作流、扩展模型、内容评论等在内的内容通用操作。
3.内容类型相关参数设置
IContent.java接口方法说明:
方法名 |
参数 |
返回值类型 |
说明 |
archive |
|
void |
归档内容 |
backup |
|
String |
备份内容 |
cancelTop |
|
void |
取消内容置顶状态 |
clone |
|
|
克隆内容 |
copy |
ZCCatalog:目标栏目 Int:复制类型 |
IContent |
复制内容到指定栏目 |
delete |
|
void |
删除内容 |
getAbsoluteLink |
String:发布平台ID |
String |
获取内容绝对地址(http://) |
getAddUser |
|
String |
获取内容添加人 |
getAuthor |
|
String |
获取内容作者 |
getCatalogID |
|
long |
获取内容所属栏目ID |
getContentDAO |
|
ZCContent |
获取ZCContent实例 |
getContentTypeID |
|
String |
获取内容类型ID |
getExtendDAO |
|
DAO<?> |
获取内容扩展表DAO实例 |
getField |
String:字段名 |
Object |
获取字段(包括扩展表里的字段)值 |
getFields |
|
Mapx |
获取所有的字段值 |
getID |
|
long |
获取内容ID |
getIndexingText |
|
String |
返回创建索引使用的文本 |
getLogoFile |
|
String |
获取内容引导图相对地址 |
getOperator |
|
String |
获取内容操作人 |
getPreviewLink |
|
String |
获取内容预览路径 |
getProp |
String:属性名 |
Object |
获取扩展属性的值 |
getProperties |
|
Mapx |
获取所有的扩展属性值 |
getPublishDate |
|
Date |
获取内容发布时间 |
getRelativeLink |
|
String |
获取内容静态页的相对地址 |
getResources |
|
DAO<ZCResources> |
返回内容关联的资源集合 |
getSiteID |
|
long |
获取内容所属站点ID |
getSourceContent |
|
IContent |
如果是映射/链接内容则返回源内容实例 |
getStatus |
|
long |
获取内容状态 |
getTitle |
|
String |
获取内容标题 |
getValues |
|
Mapx |
获取所有的扩展属性和字段值 |
insert |
|
long |
插入内容 |
isCheckPriv |
|
boolean |
是否需要验证权限 |
isDataLoaded |
|
boolean |
内容数据是否已经加载 |
isExternalLink |
|
boolean |
内容是否链接到外部URL |
isLink |
|
boolean |
内容是否链接到内部内容 |
isMapping |
|
boolean |
内容是否是其他内容的同步映射 |
loadWithDAO |
|
void |
从ZCContent和扩展DAO加载数据,如果扩展DAO为null则自动去数据库查找 |
loadWithID |
|
void |
通过内容ID加载数据 |
move |
ZCCatalog:目标栏目 |
void |
移动内容到指定栏目 |
offline |
|
void |
下线内容 |
publish |
|
void |
发布内容 |
recommendToBlock |
|
void |
推荐(撤销推荐)到区块 |
save |
|
void
|
保存内容 |
setCheckPriv |
bolean:是否校验 |
|
设置权限检查标识 |
setField
|
String:字段名 Object:字段值 |
void |
设置字段(包括扩展表里的字段)值
|
setFields |
Mapx |
Void |
批量设置字段值 |
setOperator |
|
void |
设置内容操作人 |
setProp |
String:属性名 Object:属性值 |
void |
设置扩展属性的值 |
setTop |
|
void |
将内容设为置顶 |
setTransaction |
|
void |
设置内容操作事务 |
IContentType.java接口方法说明:
方法名 |
返回值类型 |
|
getID |
String |
返回内容类型唯一标识 |
getName |
String |
返回内容类型名称 |
createExtendDAOInstance |
DAO<?> |
创建扩展数据表表实例 |
hasExtendTable |
Boolean |
是否含有扩展数据表 |
getCatalogName |
String |
返回内容类型栏目类型名称 |
getCatalogIcon |
String |
返回内容类型栏目列表中的图标 |
getDetailIcon |
String |
返回内容记录图标 |
getListURL |
String |
返回文档工作台内容列表地址 |
getQuickEditorURL |
String |
返回内容快速编辑页面地址 |
getDetailPreviewURL |
String |
返回内容预览地址 |
getDetailInteractiveURL |
String |
返回内容动态模板模式地址 |
getSelectorURL |
String |
返回内容选择页面地址 |
getEditorURL |
String |
返回内容编辑页面地址 |
getConfigURLList |
String[] |
获取管理工作台的配置地址列表 |
loadContent(long id) |
IContent |
通过ID获取内容实例 |
loadContent(ZCContent content, DAO<?> extendDAO) |
IContent |
通过内容DAO实例获取内容实例 |
getCount(Q wherePart) |
int |
根据条件获取内容数量,条件wherePart必须以where开头 |
loadContents(int pageSize, int pageIndex, Q condition) |
DataTable |
分页获取指定条件的内容集合 |
loadDetetedContents(int pageSize, int pageIndex, Q condition) |
DataTable |
分页获取指定条件的已删除内容集合 |
newContent |
IContent |
创建一个内容实例 |
getListTemplateTypeID |
String |
返回内容类型适用的列表页模板ID |
getDetailTemplateTypeID |
String |
返回内容类型适用的详细页模板ID |
clean(long catalogid, Transaction trans) |
void |
清空指定栏目下的内容数据 |
archives |
void |
内容归档 |
offLine |
void |
内容下线 |
merge(ZCCatalog catalog, ZCCatalog targetCatalog, Transaction trans) |
void |
栏目合并 |
getDataImpIdKey |
String |
提供数据导入存放ID对应关系的map的key值 |
canMix |
boolean |
是否允许与其他栏目混杂,如果为false则:1.禁止本内容类型栏目下有其他内容类型的栏目,2.本内容类型要么是一级栏目,要么是其他同类型栏目的子栏目 |
setLongTimeTask |
void |
为内容清空等操作提供进度任务对象 |
所有评论仅代表网友意见