一、效果演示
通过OpenCms系统根据业务需求定义结构化内容类型,在用内容详情模板进行展示,具体效果如下图所示
二、配置步骤
1. 切换“系统管理视图”,如下图所示,定义新的模块
2. 如下图,定义一个“用户账户模块”
3. 如下图,切换到“资源管理视图”,在system->modules下找到刚定义org.opencms.account模块节点
4. 在classes目录下定义org、opencms、account上下级目录,如下图所示,展开classes目录在下面的account,新增一个"workplace.propertes"配置文件
5. 如下图,右击“workplace.properties”文件,选择“属性”
6. 如下图,在出现界面点击“高级”
7. 在出现的高级界面找到“content-encoding”属性为“ISO-8859-1”,如下图
8. 再右击“workplace.properties”,点击“编辑源代码”选项,复制粘贴如下代码内容,保存并关闭
# TestNews nodes 用于在“新建”向导中显示的名称 @b@fileicon.account=用户账号类型@b@#新建“用户账号类型”类型时在对话框窗口显示的标题内容@b@title.newsaccount=新增用户账号@b@#编辑器中相应标签元素显示的名称,以下面编辑用户账号内容是可看见效果@b@label.Account.Title=标题 @b@label.Account.Text=内容
9. 如下图,在account的formatters目录下新建两个JSP模板,分别为“detail.jsp”和“side.jsp”
detail.jsp代码内容如下所示
<%@page buffer="none" session="false" taglibs="c,cms,fmt" %>@b@<fmt:setLocale value="${cms.locale}" />@b@<cms:formatter var="content" val="value">@b@ <div class="view-article">@b@ <div class="content">@b@ ${value.Title}<br/>@b@ <!-- 显示文本框内容 -->@b@ ${value.Text}@b@ </div> @b@ </div>@b@</cms:formatter>
side.jsp内容如下
<%@page buffer="none" session="false" taglibs="c,cms,fmt" %>@b@<fmt:setLocale value="${cms.locale}" />@b@<fmt:bundle basename="org/opencms/account/messages">@b@ <cms:formatter var="content" val="value">@b@ <div class="view-article">@b@ <div class="content">@b@ ${label.Account.Title}<br/>@b@ ${label.Account.Text} @b@ </div> @b@ </div>@b@ </cms:formatter>@b@</fmt:bundle>
10. 在account目录下的schemas节点,新建一个account.xsd的配置文件,如下图所示
account.xsd的配置文件内容如下所示,直接复制粘贴内容
<?xml version="1.0"?>@b@<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"@b@ elementFormDefault="qualified"> @b@@b@ <xsd:include schemaLocation="opencms://opencms-xmlcontent.xsd" />@b@ <!--此处name必须以 "s" 结尾,且type以 "OpenCms" 开头 -->@b@ <xsd:element name="Accounts" type="OpenCmsAccounts" /> @b@@b@ <xsd:complexType name="OpenCmsAccounts">@b@ <xsd:sequence>@b@ <xsd:element name="Account" type="OpenCmsAccount"@b@ minOccurs="0" maxOccurs="unbounded" />@b@ </xsd:sequence>@b@ </xsd:complexType> @b@@b@ <xsd:complexType name="OpenCmsAccount">@b@ <xsd:sequence>@b@ <!--本自定义类型包含的内容,Title标题,Text文本框 -->@b@ <xsd:element name="Title" type="OpenCmsString" />@b@ <xsd:element name="Text" type="OpenCmsHtml" /> @b@ </xsd:sequence>@b@ <xsd:attribute name="language" type="OpenCmsLocale" use="required" />@b@ </xsd:complexType> @b@@b@ <xsd:annotation>@b@ <xsd:appinfo>@b@ <!-- 绑定的properties文件 -->@b@ <resourcebundle name="org.opencms.account.workplace" />@b@ <mappings>@b@ <mapping element="Title" mapto="property:Title" /> @b@ </mappings>@b@ <layouts>@b@ <!-- 配置上面的文本框 -->@b@ <layout element="Text" widget="HtmlWidget" />@b@ </layouts>@b@ <validationrules />@b@ <defaults />@b@ <relations />@b@ <!-- 布局标签 -->@b@ <formatters>@b@ <!-- side.jsp 为在侧边的模板,定义宽高等属性 -->@b@ <formatter minwidth="150" maxwidth="250"@b@ uri="/system/modules/org.opencms.account/formatters/side.jsp" />@b@ <!-- detail.jsp 为在body中间显示内容的模板,定义宽高等属性 -->@b@ <formatter minwidth="400"@b@ uri="/system/modules/org.opencms.account/formatters/detail.jsp" />@b@ </formatters>@b@ </xsd:appinfo>@b@ </xsd:annotation> @b@ @b@</xsd:schema>
11. 在opencms项目部署路径下面找到opencms-modules.xml文件(/opencms/WEB-INF/config下),如下图所示
opencms-modules.xml中复制如下内容到modules节点下
<module>@b@ <name>org.opencms.account</name>@b@ <nicename><![CDATA[用户账号模块]]></nicename>@b@ <class/>@b@ <description/>@b@ <version>0.1</version>@b@ <authorname/>@b@ <authoremail/>@b@ <datecreated/>@b@ <userinstalled/>@b@ <dateinstalled/>@b@ <dependencies/>@b@ <exportpoints>@b@ <exportpoint uri="/system/modules/org.opencms.account/classes/" destination="WEB-INF/classes/"/>@b@ </exportpoints>@b@ <resources>@b@ <resource uri="/system/modules/org.opencms.account/"/>@b@ </resources>@b@ <parameters/>@b@ @b@ <resourcetypes>@b@ <!-- type中的id为唯一,为不和系统的冲突,最好在1000以上,且相互间不能冲突 -->@b@ <type class="org.opencms.file.types.CmsResourceTypeXmlContent" name="account" id="7004">@b@ <param name="schema">/system/modules/org.opencms.account/schemas/account.xsd</param>@b@ </type>@b@ </resourcetypes>@b@ <explorertypes>@b@ <!-- fileicon-自定义类型的文字(workplace.properties文件中读取) icon-自定义类型的图标 -->@b@ <explorertype name="account" key="fileicon.account" icon="xwood_icon16X16.ico" reference="xmlcontent">@b@ <newresource page="structurecontent" uri="newresource_xmlcontent.jsp?newresourcetype=account" order="7004" autosetnavigation="false" autosettitle="false"/>@b@ <!-- 权限控制 -->@b@ <accesscontrol>@b@ <!-- 给予 Administrators(管理员)组,Projectmanagers(项目管理者)组,Users(用户组) 读写的全权限 -->@b@ <accessentry principal="GROUP.Administrators" permissions="+r+v+w+c"/>@b@ <accessentry principal="GROUP.Projectmanagers" permissions="+r+v+w+c"/>@b@ <accessentry principal="GROUP.Users" permissions="+r+v+w+c"/>@b@ </accesscontrol>@b@ </explorertype>@b@ </explorertypes>@b@ @b@ </module>
复制一个16*16的图标到文件类型资源路径(/opencms/resources/filetypes)下,如下图xwood_icon16X16.ico(对应opencms-modules.xml中的icon属性值)
12. 所有配置完成,我们测试下效果,如下所示