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

news/2024/7/8 5:36:38
 

  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"%>


测试新闻内容页


 
 


  
  <%
   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);
  %>
  

 
 


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=" "${opencms.filename}" />" 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)





http://www.niftyadmin.cn/n/3653602.html

相关文章

OpenCms新手上路“一线穿”

有必要把以前的文章穿穿线了&#xff0c;希望同样的文章带给你不同的感觉……&#xff11;、OpenCms官方网站&#xff1a;    www.opencms.org    www.alkacon.com/alkacon/en  &#xff12;、了解OpenCms&#xff1a;    OpenCms简介     OpenCms溯源    …

技术总监面试题(Java),看看你会多少?

一、基础知识&#xff1a; 1、使用JDBC查询数据我们最常见的一种方式就是&#xff0c;执行完SQL后获得一个结果集&#xff08;ResultSet&#xff09;&#xff0c;然后循环从结果集中获取 每一条记录设值到JavaBean中&#xff0c;最后将数据对象以List返回。但是对不同的表查…

OpenCms自定义结构化类型的高级设置

接着上一篇OpenCms自定义结构化类型的创建&#xff0c;我们来进一步完善自定义的“TestNews”类型&#xff0c;主要是完成对自定义字段的数据验证、数据映射和默认值设置&#xff0c;完善后的XSD代码如下&#xff1a;<xsd:schema xmlns:xsd"http://www.w3.org/2001/XML…

IOS SQLite3 存储和读取图片

存储图片 // Save Small Image Data by given main url - (void) SaveImagesToSql: (NSData*) imgData :(NSString*) mainUrl{NSLog( "\n*****Save image to SQLite*****\n" );const char* sqliteQuery "INSERT INTO IMAGES (URL, IMAGE) VALUES (?, ?)&quo…

OpenCms7.0 RC 2_千寻汉化包v2.2 发布

OpenCms7.0 RC 2_千寻汉化包2.2——2007年6月7日OpenCms中文资源第一博客&#xff08;http://blog.csdn.net/qianxuncms/&#xff09;国内首发。OpenCms 7 RC2 的主要特点&#xff1a;1、为OpenCms6.x版本增加了至OpenCms7 RC 2了升级包&#xff0c;但此升级包只适用于安装数据…

无需苹果审核的App发布——企业版IDP的申请及“In House”发布

企业版IDP的申请及“In House”发布 企业版IDP&#xff0c;即iOS Development Enterprise Program。注意是$299&#xff0f;Year那种&#xff0c;并不是$99/Year的那种。 这种方式的IDP其最大的好处在于&#xff1a;可以发布“In House”应用。 这种应用使用一种叫做“In House…

OpenCms7.0.0千寻汉化包v3.0 国内首发

OpenCms7.0.0千寻汉化包3.0——2007年7月5日OpenCms中文资源第一博客&#xff08;http://blog.csdn.net/qianxuncms/&#xff09;国内首发。 OpenCms 7 的主要特点&#xff1a;1、为基于MsSQL和Oracle安装的OpenCms6各版本提供至OpenCms7.0的升级向导&#xff1b; 2、增加了对P…

OpenCms7之升级变化(2007-11-02更新)

OpenCms7发布已经有一段时间了&#xff0c;给我们带来新功能的同时&#xff0c;有些地方也发生了一些变化&#xff0c;如果不注意的话&#xff0c;在以前版本中正常的代码会在OpenCms7中出错&#xff0c;总结如下&#xff1a;代码变化&#xff1a;1、7.0之前的“${}”的写法要在…