Jeecms二次开发相关文档(入门)
- 格式:doc
- 大小:115.00 KB
- 文档页数:13
易优CMS可以二次开发吗?易优二开有哪些规范?很多朋友在问易优cms可以支持二次开发吗?当然是可以的。
易优CMS二次开发也没有任何限制,只要掌握易优CMS框架就能快速二次开发。
为了让更多人了解二次开发,并更方便的了解易优CMS的二次开发,下面将会简单的介绍关于DedeCMS二次开发的一些基础和大纲。
目录和文件目录使用小写+下划线;类库、函数文件统一以.php为后缀;类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);函数和类、属性命名类的命名采用驼峰法(首字母大写),例如User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User;函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip;方法的命名使用驼峰法(首字母小写),例如 getUserName;属性的命名使用驼峰法(首字母小写),例如tableName、instance;以双下划线“__”打头的函数或方法作为魔术方法,例如__call 和 __autoload;常量和配置常量以大写字母和下划线命名,例如 APP_PATH和 THINK_PATH;配置参数以小写字母和下划线命名,例如url_route_on 和url_convert;数据表和字段数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如think_user 表和user_name字段,不建议使用驼峰和中文作为数据表字段命名。
应用类库命名空间规范应用类库的根命名空间统一为app(不建议更改,可以设置app_namespace配置参数更改,V5.0.8版本开始使用APP_NAMESPACE常量定义);例如:app\index\controller\Index和app\index\model\User。
二次开发技术文档了解系统结构程序为MVC 3层结构,模型/ 视图/ 控制器。
●模型是前后台公用。
完成业务逻辑,所有的数据库操作,文件等资源调用,都由此层实现。
●控制器则是前后台独立。
负责业务模型的调用,拼接,变量的转换等等。
●视图层采用类似smarty的实现。
在任何时候都有一个全局变量$system指向唯一的一个内核类:core/kernel.php控制器负责所有的变量的转换,包括对外界的变量转换。
像胶水一样粘合各个业务model,并在其中的数据交互过程中做一些数据转换过程。
最终将变量抛到模板层。
模板层负责编译成html输出,这里我们创建了大量的smarty插件来减少开发者的重复工作量。
结构图公共类图公共函数库公共函数库位于/core/func_ext.php,它在内核加载时首先被加载,对全系统有效。
其中包含若干php5函数的php4模拟版本:●file_put_contents●json_encode●json_decode●ftp_chmod●array_diff_key●http_build_query运行过程商派Commerce B2B标准版前后台调度都分别通过各自目录下一个名为index.php的入口文件进行,入口文件接受控制器、方法等的输入参数,调度给对应的控制器方法执行并输出结果。
index.php会调用kernel。
Kernel基础类提供模型对象加载,插件入口,错误处理,设置管理,输入输出,第三方类库加载等基础服务。
前后台及安装入口程序在初始化时,都会初始化一个对应的内核类,这个类在前台是shopCore.php,后台时是adminCore.php。
这两个文件都是继承core/kernel.php文件。
该内核类首先会形成一个名为system的指向自身的全局对象,然后根据传入参数调用对应的控制器方法运行。
控制器层与模型层都会产生对该全局system对象的调用来使用基础服务。
并且控制器和模型层在自身被实例化之后都可以使用$this->system来引用内核对象。
二次开发文档Jspxcms无侵入式插件开发(二次开发)教程之一:概述Jspxcms支持无侵入式插件和二次开发,无需修改系统原有代码,即可无缝整合Entity、Service、Controller、功能菜单、权限、标签、国际化等功能。
系统中“插件--简历管理”就是以这种方式实现的,下面就以“简历管理”讲解Jspxcms插件和二次开发的方法。
本帖隐藏的内容需要回复才可以浏览配置文件位置:/WEB-INF/conf/plugin。
所有的配置文件都必须在这个目录,在该目录下的配置文件会自动加载。
在该目录下新建自己的文件夹,可以是任何名字,如:abc、novel等,本例为plug。
即/WEB-INF/conf/plugin/plug 配置文件说明application.properties:功能菜单、权限、国际化、Entity都与这个文件相关。
context-dao.xml:Dao的加载。
context-service.xml:Service的加载。
controller-back.xml:后台Controller的加载。
controller-fore.xml:前台Controller的加载。
context-directive.xml:标签的加载。
其他与插件开发相关的文件目录/WEB-INF/messages/plugin/plug:后台国际化文件位置/WEB-INF/messages/plugin/plugfore:前台国际化文件位置/WEB-INF/views/plug:后台jsp文件位置/files/1/bluewise/plug_resume.html:插件的前台模版插件源代码包名:com.jspxcms.plugJspxcms无侵入式插件开发(二次开发)教程之二:菜单与权限本帖隐藏的内容需要回复才可以浏览菜单和权限配置文件:/WEB-INF/conf/plugin/plug/application.properties一级菜单配置(分号为分割符)1.menu.650=navigation.plug;nav.do?menuId=650;nav_plug复制代码650:是后台导航一级菜单的编号,编号大小决定菜单的前后位置。
jeecms⼆次开发必备JEECMS⼆次开发第1章JEECMS系统介绍 (3)1.1关于JEECMS (3)1.2JEECMS系统特点 (4)1.3技术架构 (4)1.3.1跨操作系统平台 (5)1.3.2跨数据库平台 (5)1.3.3跨应⽤服务器 (6)1.3.4兼容多种浏览器 (6)1.4JEECMS⼯程的包结构分析 (7)1.4.1⽂章模块 (7)1.4.2辅助模块 (7)1.4.3通⽤操作模块 (7)1.4.4核⼼功能模块 (8)1.4.5下载模块 (8)1.5页⾯、资源⽂件结构 (9)1.5.1站点内容、模板结构 (10)1.5.2站点资源⽂件结构 (10)第2章标签使⽤和模板的制作 (11)2.1模板规划 (11)2.1.1资源⽂件 (11)2.1.2模板⽂件 (11)2.1.3使⽤⽅式 (11)2.1.4标签调⽤样式 (11)2.2I NCLUDE标签 (13)2.2.1功能简介 (13)2.2.2标记说明 (13)2.2.3 明确标签的使⽤范围 (13)2.2.4调试标签了解其使⽤⽅法 (13)2.3A RTI L IST标签 (15)2.3.1功能简介 (15)2.3.2标记说明 (15)2.3.3 明确标签使⽤范围 (18)2.3.4 调试标签了解其使⽤⽅法 (18)2.4P OSITION标签 (20)2.4.1功能简介 (20)2.4.2标记说明 (20)2.5C HNL L IST标签 (21)2.5.1功能简介 (21)2.5.2标记说明 (21)2.5.3明确标签的使⽤范围 (21)2.5.4调试标签了解其使⽤⽅法 (22)2.6内容页常⽤标签 (23)2.6.1标记说明 (23)第1章JEECMS系统介绍1.1关于JEECMSJEECMS是JavaEE版⽹站管理系统(Java Enterprise Edition Content Manage System)的简称,是⼀款⾃主研发的基于J2EE平台的内容管理系统Java凭借其强⼤、稳定、安全、⾼效等多⽅⾯的优势,⼀直是企业级应⽤的⾸选。
项目二次开发源代码及详细说明I. 项目介绍本文档描述了一个二次开发项目的源代码及详细说明。
该项目是基于一个开源的企业资源管理系统进行二次开发,以满足特定客户的需求。
原始系统功能包括客户关系管理、订单管理、库存管理等,但客户需要在原始系统的基础上增加一些新的功能,比如业务报表的定制、权限管理的优化等。
为了满足客户的需求,我们需要对原系统进行二次开发,修改和添加一些功能,以适应客户的特定业务需求。
II. 项目目标1. 通过二次开发,实现客户需求的定制化功能,并满足特定的业务需求。
2. 优化原系统的权限管理模块,增强系统的安全性和稳定性。
3. 重构原系统的报表模块,实现业务报表的定制化功能。
4. 对原系统的库存管理模块进行优化,提高系统的性能和稳定性。
III. 项目源代码及详细说明1. 新增功能模块:客户需要系统新增一个产品价格管理模块,方便他们随时根据市场需求调整产品的价格。
我们在系统中增加了产品价格管理的功能模块,客户可以在这个模块中根据自己的需求,对产品的价格进行调整。
以下是新增功能模块的主要源代码及详细说明:```python# 产品价格管理模块import datetimefrom django.db import modelsclass Product(models.Model):name = models.CharField(max_length=100, verbose_name='产品名称')price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='产品价格') create_time = models.DateTimeField(default=datetime.now, verbose_name='创建时间')class Meta:verbose_name = '产品'verbose_name_plural = verbose_name# 增加产品价格调整记录模型class PriceAdjustRecord(models.Model):product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name='产品')old_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='调整前价格')new_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='调整后价格')adjust_time = models.DateTimeField(default=datetime.now, verbose_name='调整时间')class Meta:verbose_name = '价格调整记录'verbose_name_plural = verbose_name```上面的代码是在原系统中新增的产品价格管理模块的源代码。
二次开发手册业务流程定制1.基础业务单据方案定义基础业务单据适用于采用主-明细结构的业务流程,主表和明细表为一对多的关系,并通过一个字段关联(一般为DJID),如采购入库单、处方划价单等。
如图:1.1方案总体方案编号:业务方案的编号,每个方案都有一个编号,编号不能重复。
方案名称:方案的名称,同时也是方案窗体的标题。
单据标识: 单据编号的开头部分单据编号长度: 单据编号的总长度单据编码格式: YYYY 代表四位的年,YY代表两位的年,MM:两位月,DD:两位日,CZY:操作员编号,用'+'号连接各个部分也可使用固定字符。
如:'SFD'+YYYY+MM+DD ,设置编码格式后单据标识不起作用,但同样受到编号长度的约束。
主明细关键字段: 定义主表和明细表的关键字段,一般为'DjID'明细序号字段: 定义明细表的序号字段,一般为'Xh'(如图:)1.2基础业务单据方案主要构成要素:主表SQL: 定义单据数据主表的数据来源的SQL语句。
主表用来存储单据主体数据,如单据编号、日期、操作员、以及明细表的汇总信息等。
明细表SQL: 定义单据明细数据来源的SQL语句。
明细表用来存储明细数据一次检索SQL: 定义辅助明细数据输入的检索数据来源的SQL语句;一次检索数据只作为数据的来源,不存储数据。
插入明细数据时,扫描明细数据字段和检索数据字段,如果字段名称相同则将检索数据写入该字段。
二次检索SQL: 定义在一次检索完成之后的辅助明细数据输入的检索数据来源的SQL语句;是一次检索的补充。
比如做门诊收费功能时用做选择处方。
保存执行SQL: 定义单据在保存时执行的SQL语句。
1.3相关设置:显示一次检索:设置是否显示检索栏。
(有的业务单据不需要检索栏)数字码字段:当输入框中输入纯数字时,将以设置的数字码字段进行动态查找汉字码字段:当输入框中含有汉字时,将以设置的汉字码字段进行动态查找拼音码字段:当输入框中为字母时,将以设置的拼音码字段进行动态查找条形码字段:当输入框中为输入条码时,将以设置的条形码字段定位检索数据二次检索输入提示:设置二次检索时的输入提示二次检索后结束输入:设置是否在二次检索后结束输入(具体参看图形)1.4打印设置报表名称:打印样式的文件名,不用加后缀单据SQL语句:打印数据来源的SQL语句保存后默认打印:设置保存后是否默认为打印1.5颜色设置明细网格显示选项背景色:指定明细网格的背景色,默认为白色行醒目显示条件:定义明细数据行醒目显示的条件,当满足条件时,该行将以指定的颜色显示。
jeecms二次开发目录1. jeecms二次开发 (2)1.1 jeecms二次开发简要说明文档之概述篇 (2)1.2 jeecms二次开发简要说明文档之开发篇 (2)1.3 jeecms部署到linux上保存文章出错 (6)1.4 jeecms二次开发总结 (6)1. jeecms二次开发1.1 jeecms二次开发简要说明文档之概述篇在学校时就知道jeecms,那时也仅仅是在本地架上java环境安装玩玩,没有进行仔细的研究。
工作后才开始仔细的研究jeecms的源代码,作为国内为数不多的开源产品,其源代码有很多的可圈可点之处,但总觉得其开源的力度远远不够,在我的理解下不算是真正的开源,其二次开发的说明文档太少,官方也仅仅是给出标签的使用说明。
首先要说明的是本文仅仅讲的是jeecms-2.3.2-final版下的二次开发,jeecms最新版是jeecms v3.0 beta版,听说进行了重构,目前放出的是安装版,很希望jeecms官方赶快放出源代码,好再次研究研究。
下面曹海峰将从四个方面讲述jeecms的二次开发。
1、文件结构主要讲述css样式文件、图片、js、模板、jeecms标签等的放置路径。
2、模板模板的路径、命名规则等。
3、标签的使用官方标签,以及二次开发时如果自定义标签。
4、开发流程进行二次开发时整个流程的一个简要介绍。
1.2 jeecms二次开发简要说明文档之开发篇前段时间曹海峰介绍了jeecms的二次开发,但没有具体讲怎么对jeecms进行二次开发,今天补上。
整理的很凌乱,但对于jeecms的二次开发肯定没什么问题了。
一、文件结构网站css样式,图片,js的放置路径:WebRoot/res_base/Html页面如何引用:${root}就是WebRoot/res_base/的路径实例:1${root}/fgw/article/css/common.css前台模板放置路径:WebRoot/WEB-INF/user_base/template,文件夹是对应的模块名称,一定要和每个Constants.java下的常量名相同,否则会说找不到页面。
Jeecms开发学习笔记青岛海尔软件有限公司@带吴钩目录1.文档说明 (3)2. 关键词 (3)2.1MVC (3)2.2实体 (3)2.3实现类 (3)3. 从Act到Mng到Dao (4)3.1Act (4)3.1.1什么是Act? (4)3.1.2Act实现从html到jspx (4)3.1.3从Act到Mng (6)3.2Mng和MngImpl (8)3.2.1什么是Mng和MngImpl? (8)3.2.2Mng (9)3.2.3从MngImpl到Dao (10)3.3Dao和DaoImpl (13)3.3.1什么是Dao和DaoImpl? (13)4. 实体类 (13)4.1为什么使用实体类? (13)4.2id的作用 (15)5配置文件 (16)5.1数据库配置文件 (16)5.2国际化 (18)1.文档说明本文档来源一个现实项目的学习,笔者须在Jeecms框架内实现前台提交简历,后台查看简历的过程。
而笔者毫无java web开发经验。
因此本文档适用于毫无java web开发经验人群,将以Jeecms的spring MVC + spring + hibernate框架为结构进行介绍。
建立一个实体,从数据的写入到查找为流程,进行一个详细的描述。
2.关键词2.1MVCMVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
2.2实体实体类主要是作为数据管理和业务逻辑处理层面上存在的类别;它们主要在分析阶段区分。
实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。
Jeecms二次开发相关文档(入门)目录:(本文档中内容整理自网络并结合自己实际开发经验总结而来,文档后有相关内容引用出处,本处声明免责,不承担任何纠纷,文档供大家交流使用)Jeecms二次开发相关文档(入门) (1)一、jeecms内部请求转发运行原理 (2)二、jeecms使用freemarker标签示例及原理 (4)1、标签使用示例 (4)2、标签原理 (4)3、自定义标签(实例演示说明标签用法) (7)三、在MyEclipse工作环境中构建jeecms项目 (10)1、搭建Jeecms的运行环境 (10)2、安装jeecms演示系统 (10)3、导入Jeecms项目 (10)一、jeecms内部请求转发运行原理Jeecms中有众多的配置文件,单xml配置文件就相当繁多,各个文件间的关联查找使用关系也不像简单的struts配置文件一样。
如首页的显示过程如下。
系统架构是ssh+freemarker模板构成的,所以先要熟悉freemarker模板技术。
先看web.xml文件,其中欢迎页面有:<welcome-file-list><welcome-file>index.jspa</welcome-file><welcome-file>index.do</welcome-file><welcome-file>index.html</welcome-file></welcome-file-list>接着再看jeecms/core/struts-core-front.xml配置文件,发现有个action的通用配置:<action name="**" class="core.dynamicSystemAct"><result type="chain"><param name="namespace">${namespace}</param><param name="actionName">${actionName}</param></result><interceptor-ref name="exception"/><interceptor-ref name="domain"/><interceptor-ref name="cookieIdentity"/><interceptor-ref name="url"/></action>struts收到请求以后,将请求转发到core.dynamicSystemAct这个对象,注意这个这个class并不是真正的类,是类的别名,由spring通过标注@Controller进行绑定,web应用上下文可以通过classpath自动扫描到这个类。
@Controller("core.dynamicSystemAct")public class DynamicSystemAct在这个action执行之前,先要执行好几个拦截器。
其他struts和webwork 自带的拦截器不必说,主要说一下在程序里面自定义的几个比较重要的拦截器(定义在jeecms/src/struts-default.xml文件中)。
DomainNameInterceptorUrlInterceptorCookieIdentityInterceptor然后执行action自己的execute方法,产生2个参数:namespace = "/jeedynamic/" + sys;actionName = "Page";这2个参数决定了程序的走向,组成转发路径:/jeedynamic /jeecms/Page.do,然后通过查找下面的配置信息<package name="cms.front.page" namespace="/jeedynamic/jeecms" extends="empty-default"><action name="Page" class="cms.cmsPageAct"><result>${tplPath}</result><result name="pageCache" type="pageCache">${tplPath}</result><interceptor-ref name="exception"/><interceptor-ref name="chain"/></action></package>注:其他的请求过程类似,先找到命名空间,然后找到对应的action进行处理。
将请求转发给cms.cmsPageAct对象,同上的道理,对应到控制器:com.jeecms.cms.action.front.CmsPageAct。
拦截器处理完毕后,执行自己的execute 方法,判断若是首页,则执行sysIndex()方法,返回一个模板路径tplPath:/WEB-INF/user_base/jeecms_com_www/template /article/default/index.html,找到这个文件,是文章对应的首页模板,里面有使用的各freemarker标签@cms等。
二、jeecms使用freemarker标签示例及原理1、标签使用示例可以看到,在jeecms系统的html文档中经常有好多@cms等引用标签,这类标签是freemarker标签使用会是下列情况①、单独标签调用示例:[@cms.ChnlList/] [@cms. ArtiList /](这个是显示文章列表的)②、自定义标签调用示例:[@cms.ChnlList id='' inner='1';c,i]<a href="${c.url}">${}</a>[#if (i+1)%2==0]<br/>[/#if][/@cms.ChnlList]③、配合其它标签嵌套调用示例:[@cms.ChnlList id='' sysType='article' hasContent='1' inner='1';c]<table width="300" border="0" cellpadding="0" cellspacing="1" bgcolor="#eee"><tr><td height="30" bgcolor="#EEEEEE"><a target="_blank" href="${c.url}">${}</a></td></tr><tr><td bgcolor="#FFFFFF">[@cms.ArtiList chnlId=c.id sysContent='1-1' titLen='20' count='6' /]</td></tr></table>[/@cms.ChnlList]2、标签原理①部分常用标签参数:<#--Id:栏目idfirstResult:第一条记录。
(默认0)count:记录数。
(默认20)isPage:是否分页。
【0:不分页;1:分页】(默认0)pageNo:页号。
(默认当前页)cssClass:容器classcssStyle:容器styleinner:是否使用标签中直接编写html代码。
【0:否;1:是】(默认0) style:标签内部样式。
如果指定sysContent或userContent,则该项无效。
【1:普通列表;】(默认1)inner:是否使用标签中直接编写html代码。
【0:否;1:是】(默认0)isLoop:内容是否循环。
【0:不循环;1:循环】(默认1)sysTpl:使用系统模板。
【0:不使用;1:使用】(默认1)sysContent:系统内容样式。
(默认0)userContent:自定义内容文件名。
如果指定了系统内容样式,则该项无效。
(默认空)sysPage:系统分页样式。
【0:不分页;1:样式一;2:样式二】(默认0) userPage:自定义分页样式文件名。
如果指定了系统分页样式,则该项无效。
(默认空)custom:字符串数组。
用于个性化处理。
(默认空数组)-->②原理:如freemarker标签@cms,定义在配置文件freemarker.properties中:auto_import="/WEB-INF/ftl_lib//index.ftl" as p, "/WEB-INF/ftl_lib/jeecms/index.ftl" as cms@cms标签所用的ftl模板文件为index.ftl。
打开index.ftl文件,includes了多个ftl,其中有action_cms.ftl,该文件用标签#macro,自定义许多directive:ChnlList和CommentList 等。
里面使用struts2标签@s.action来请求数据,整个的index.html页面就是这么加载出来的。
通过freemarker引擎来解析数据模型,最后显示到前台,展现给客户。
index.html include head.html[@cms.ChnlList id='' inner='1';c]<li class="thisclass"><a href="${c.url}">${}</a></li>[/@cms.ChnlList]对应action_cms.ftl中macro ChnlList 定义,使用struts标签action <@s.action name='ChnlListInner' namespace='/jeecms/tag/cms'>在struts-front.xml中找到对应的class="cms.chnlPartAct".private Pagination tagChnlList() {list = cmsChannelMng.getChild(getWebId(), sysType, chnlId, orderBy,isDisplay == 1 ? true : false, hasContent == 1 ? true : false,firstResult, count);pagination = new Pagination(pageNo, count, list.size(), list);return pagination;}CmsChannelMng-->CmsChannelMngImpl-->BaseManagerImpl-->BaseDao-->BaseDaoImpl 待整理:如页面跳到action: article.articleActlist()将取出对应的文章pagination = articleMng.getRightArticle(getWebId(), chnlId,getAdminId(), queryInputAdminId, queryContentCtgId,queryDisabled, queryTopTime, queryTopLevel, queryStatus,queryTitle, queryOrder, pageNo, getCookieCount());(freemarker macro对应参数)最终掉到ArticleDaoImpl.public Pagination getRightArticle(Long webId, Long chnlId, Long adminId, Long inputAdminId, Long contentCtgId, boolean disabled,boolean topTime, int topLevel, int status, String title, int order,int pageNo, int pageSize)3、自定义标签(实例演示说明标签用法)自定义标签时候会用到Macro,Macro又叫宏,宏是在模板中使用macro指令定义,宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子。