OpenCms开发之——自定义结构化类型

 

  OpenCms中很重要的一个特性就是XML内容,通过XML内容,你可以创建自已的结构化内容,如新闻等,下面通过创建一个简单的“测试新闻”类型来介绍一下OpenCms的这一重要特性:
1、新建模块“org.opencms.testnews(模块创建过程详见:http://blog.csdn.net/qianxuncms/archive/2007/04/06/1554192.aspx)。
2、编辑模块,为模块增加导出点,如下图:


3、编辑opencms-modules.xml文件,在模块org.opencms.testnews中增加如下内容,其中“id=7001”是新建资源的ID,为了必免和系统中已有类型的ID冲突,建议这个值设置大一些,最好在1000以上:

         < module >
               
< name > org.opencms.testnews </ name >             
                ………………………………………………
            
< parameters />
<!--增加内容开始-->
            
< resourcetypes >
                
< type  class ="org.opencms.file.types.CmsResourceTypeXmlContent"  name ="testnews"  id ="7001" >
                    
< param  name ="schema" > /system/modules/org.opencms.testnews/schemas/testnews.xsd </ param >
                
</ type >
            
</ resourcetypes >
            
< explorertypes >
                
< explorertype  name ="testnews"  key ="fileicon.testnews"  icon ="testnews.gif"  reference ="xmlcontent" >
                    
< newresource  page ="structurecontent"  uri ="newresource_xmlcontent.jsp?newresourcetype=testnews"  order ="7001"  autosetnavigation ="false"  autosettitle ="false" />
                    
< accesscontrol >
                        
< accessentry  principal ="GROUP.Administrators"  permissions ="+r+v+w+c" />
                        
< accessentry  principal ="GROUP.Projectmanagers"  permissions ="+r+v+w+c" />
                        
< accessentry  principal ="GROUP.Users"  permissions ="+r+v+w+c" />
                    
</ accesscontrol >
                
</ explorertype >
            
</ explorertypes >
<!--增加内容结束-->
        
</ module >

4、重启Tomcat;
5、在/system/modules/org.opencms.testnews/目录下新建“schemas”文件夹;
6、在新建的“schemas”目录下新建文本文件“testnews.xsd”,内容如下:


< xsd:schema  xmlns:xsd ="http://www.w3.org/2001/XMLSchema"  elementFormDefault ="qualified" >

    
< xsd:include  schemaLocation ="opencms://opencms-xmlcontent.xsd" />
        
    
< xsd:element  name ="TestNewss"  type ="OpenCmsTestNewss" />
    
    
< xsd:complexType  name ="OpenCmsTestNewss" >
        
< xsd:sequence >
            
< xsd:element  name ="TestNews"  type ="OpenCmsTestNews"  minOccurs ="0"  maxOccurs ="unbounded" />
        
</ xsd:sequence >
    
</ xsd:complexType >

    
< xsd:complexType  name ="OpenCmsTestNews" >
        
< xsd:sequence >
            
< xsd:element  name ="Title"  type ="OpenCmsString"   />
            
< xsd:element  name ="Date"  type ="OpenCmsDateTime"   />             
            
< xsd:element  name ="Text"  type ="OpenCmsHtml"   />
        
</ xsd:sequence >
        
< xsd:attribute  name ="language"  type ="OpenCmsLocale"  use ="required" />
    
</ xsd:complexType >

    
< xsd:annotation >
        
< xsd:appinfo >
            
< resourcebundle  name ="org.opencms.testnews.workplace" />
            
< preview  uri ="${previewtempfile}"   />
            
< mappings >
                
< mapping  element ="Title"  mapto ="property:Title"   />
            
</ mappings >
            
< defaults >
                
< default  element ="Date"  value ="${currenttime}" />
            
</ defaults >
        
</ xsd:appinfo >

    
</ xsd:annotation >   
</ xsd:schema >

7、在/system/modules/org.opencms.testnews/classes/下分别创建如下目录结构:/org/opencms/testnews/,在此目录下创建本地化文件“workplace.properties”,类型为文本文件,内容如下:

# TestNews nodes
   #用于在“新建”向导中显示的名称
    fileicon.testnews=测试新闻
    #新建“测试新闻”类型时在对话框窗口显示的标题内容
title.newtestnews=添加一条测试新闻
   #编辑器中相应元素显示的名称,以下面编辑新闻的图片中可看到效果
label.TestNews.Title = 标题
label.TestNews.Date=发布时间
label.TestNews.Text=内容

  注意,在新建workplace.properties后,设置此文件的“content-encoding”属性为“ISO-8859-1”,这样在文件中输入中文后,直接保存,系统会自动为其进行编码转换:)

8、发布文件,重启Tomcat;
9、这时在“新建”——>“结构化内容”中就会增加了我们自定义的新类型“测试新闻”,如下图:



  切换到“/sites/default/”默认站点下,创建文件夹:test,在其中新建testnews类型文件,编辑内容,如下图,“标题”、“发布时间”和“内容”就是我们在“workplace.properties”中汉化的内容:



10、在/system/modules/org.opencms.testnews/下创建jsptemplates目录,创建新闻内容页(三级页面):testnews.jsp,内容如下:

<%@ page session="false" import="java.text.SimpleDateFormat,java.util.Date"%>
<%@ taglib prefix="c" uri=" http://java.sun.com/jstl/core" %>
<%@ taglib prefix="cms" uri=" http://www.opencms.org/taglib/cms"%>
<html>
<head>
<title>测试新闻内容页</title>
<cms:editable/>
</head>
<body>
 <cms:contentload collector="singleFile" param="%(opencms.uri)" editable="true">
 <h2><cms:contentshow element="Title" /></h2>
  <c:set var="strDate"><cms:contentshow element="Date" /></c:set>
  <%
   long longDate =  Long.valueOf(pageContext.getAttribute("strDate").toString()).longValue();
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  String createdDate = sdf.format(new Date(longDate));
  out.print(createdDate);
  %>
  <p><cms:contentshow element="Text" /></p> 
 </cms:contentload>
</body>
</html>


11、设置“test”目录template-elements属性为“/system/modules/org.opencms.testnews/jsptemplates/testnews.jsp”,通过此处设置,则test目录下所有“testnews”类型的文件的内容页都由“testnews”来显示,效果如下;


12、创建“testnews”类型文件列表页面,在“test”目录中创建“list.jsp”,内容如下:

<% @ page session = " false "   import = " java.text.SimpleDateFormat,java.util.Date " %>
<% @ taglib prefix = " c "  uri = " http://java.sun.com/jstl/core "   %>
<% @ taglib prefix = " fmt "  uri = " http://java.sun.com/jstl/fmt "   %>
<% @ taglib prefix = " cms "  uri = " http://www.opencms.org/taglib/cms " %>
< html >
< head >
< title > 测试新闻列表页 </ title >
< cms:editable />
</ head >

< body >
    
< cms:contentload collector = " allInFolderPriorityDateDesc "  param = " /test/news_%(number).html|testnews "  editable = " true " >
        
< a href = " <cms:link><cms:contentshow element= "%( opencms.filename) "  /></cms:link> "  target = " _blank " >< cms:contentshow element = " Title "   /></ a >
        
< c:set var = " strDate " >< cms:contentshow element = " Date "   /></ c:set >
        
<%  
         
long  longDate  =   Long.valueOf(pageContext.getAttribute( " strDate " ).toString()).longValue(); 
        SimpleDateFormat sdf 
=   new  SimpleDateFormat( " yyyy-MM-dd HH:mm " );
        String createdDate 
=  sdf.format( new  Date(longDate));
        out.print(createdDate);
        
%>
    
</ cms:contentload >
</ body >
</ html >

  显示效果如下图,点击右侧“+”可以添加新闻,点击“X”号可以删除新闻,点击“圆圈”可以编辑新闻:

  通过以上简单的步骤,我们就在OpenCms中创建了自己定义的结构化内容,在XSD中你可以创建更加复杂的结构来满足你的要求,下一篇文章详细介绍XSD的详细配置。
  (谢谢关注OpenCms——中文资源第一博客http://blog.csdn.net/qianxuncms/,欢迎与作者直接交流,共同进步。MSN:qianxuncms@hotmail.com,QQ:9165456)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 38
    评论
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值