插件开发入门第一步

可以针对网站管理后台、代理后台、总管理后台,这三种后台进行功能扩展。 而这些扩展的,将在相应后台左侧的 “ 功能插件 ” 中显示。 这里,以一个简单的例子,来讲解如何进行插件功能的扩展。 我们增加一个插件,该插件在总管理后台中,功能插件 菜单下,子菜单名为 **入门示例** ,该插件在网市场云建站系统中注册的唯一 id 标示为 **learnExample** ## 第一步,增加一个插件 在 CMS模式网站管理后台 中,增加一个名为 入门示例 的插件。 1. 创建 com.xnx3.wangmarket.plugin.learnExample 包 其中 learnExample 便是插件的id,插件的唯一标示。这个插件id在整个网市场中是唯一的,不可跟其他已安装的插件重复。如果有重复,那么网市场中已安装的插件,重名插件中只有一个是能用的。 1. 增加 com.xnx3.wangmarket.plugin.learnExample.Plugin 类,该类的作用便是将插件注册进网市场云建站系统。 所创建的目录及Plugin类,结构如下图方框中所示:
其中,Plugin 类的源代码为: ```` package com.xnx3.wangmarket.plugin.learnExample; import com.xnx3.j2ee.pluginManage.PluginRegister; /** * 插件学习入门示例。这个便是将插件注册进网市场云建站系统中,让某个指定的管理后台中,出现这个插件的入口菜单。 * @author 管雷鸣 */ @PluginRegister(version = "1.2", menuTitle = "插件开发示例",intro="适用于网市场云建站系统v5.0及以后的版本。", menuHref="/plugin/learnExample/index.do", applyToSuperAdmin=true, versionMin="5.0") public class Plugin{} ```` 其中,PluginRegister 注解的参数说明如下: | 变量 | 说明 | 默认值 | 是否必填 | | ------------ | ------------ | ------------ | ------------ | | menuTitle | 在网站管理后台、或代理后台、或总管理后台中,功能插件下,显示的菜单项的标题文字 | 无 | 必填 | | menuHref | 在..管理后台中,功能插件下,显示的菜单项的超链接网址。如:站外的绝对路径 ( http://www.baidu.com ),或站内的相对路径 ( /plugin/learnExample/index.do ) 注意,插件的访问路径要在 /plugin/插件包名/ 下 | 无 | 必填 | | applyToCMS | 是否在 CMS模式**网站管理后台** 的功能插件中显示,true为显示,false为不显示。| false | 可不填 | | applyToAgency | 是否在 **代理后台** 的功能插件中显示,true为显示,false为不显示。| false | 可不填 | | applyToSuperAdmin | 是否在 **总管理后台** 的功能插件中显示,true为显示,false为不显示。 | false | 可不填 | #### 启动项目,进行测试 1. 进入登陆页面 http://localhost:8080/login.do 1. 使用 账号: admin 密码: admin 进行登陆 1. 查看效果,可以看到,功能插件下,已经多了这个名为 " 入门示例 " 的插件了!如下图所示:
当然,它点击是报404的,找不到页面的,这个我们需要在下面第二步进行实现。 ## 第二步,具体功能实现 这里,来给 入门示例 这个插件,增加一个首页,当点击功能插件下的 **入门插件** 子菜单时,会打开这个入门插件的首页。 #### 1. Java代码创建Controller控制器 在 com.xnx3.wangmarket.plugin.learnExample 包下, 创建一个包 controller ,然后在 controller 下 ,创建一个控制器 > com.xnx3.wangmarket.plugin.learnExample.controller.IndexController ```` package com.xnx3.wangmarket.plugin.learnExample.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.xnx3.j2ee.pluginManage.controller.BasePluginController; /** * 功能插件开发入门示例 * @author 管雷鸣 */ @Controller(value="LearnExampleIndexPluginController") @RequestMapping("/plugin/learnExample/") public class IndexController extends BasePluginController { /** * 当点击 功能插件 下的子菜单 入门示例 时,会进入此页面( 因为在 Plugin 类中,注册的 menuHref 填写的url是这个 ) */ @RequestMapping("index${url.suffix}") public String index(){ /* * 这里可进行逻辑控制等 */ return "plugin/learnExample/index"; } } ```` 注意事项: 1. @Controller 这个注解一定要加上value值,value值为 插件ID + 类名,如这个,便是 LearnExample + IndexPluginController ,以保证Controller注册进spring中时是唯一的,而不会跟其他Controller重名。 1. @RequestMapping 插件访问的路径,路径命名方式为: /plugin/+插件ID 1. Controller 类要继承 [com.xnx3.j2ee.pluginManage.controller.BasePluginController](https://gitee.com/mail_osc/wangmarket/blob/master/src/main/java/com/xnx3/j2ee/pluginManage/controller/BasePluginController.java) 目录结构如下:
#### 2. 创建静态资源存放文件 创建 css、js、images 等静态资源存放的文件,在 src/resource/static/plugin/ 目录下,创建一个名为 learnExample 的目录(文件夹名便是插件ID),learnExample下再分别建立 css、js、images文件夹(这个css、js、images的命名方式及存放方式,这个不是必须的,但建议这样来,让项目更清晰),用于存放各种静态文件。目录结构如下:
如上图所示,这里,已经放上了一个二维码图片 learnExample/images/qr.jpg ,它将在前端页面中用到。 如果插件中没有静态资源,不需要引入图片、css、js等资源,那么这个目录不需要创建。 #### 3. 创建前端页面 1. src/main/webapp/WEB-INF/view/plugin 目录下,增加 **learnExample** 文件夹(这个文件夹名,便是第一步中,注册进网市场的,插件的唯一 id,跟这个插件相关的jsp页面,都会在这个文件夹中) 1. 在 learnExample 文件夹下,增加 index.jsp 文件,这里,内容简单写上点,只是个示例: ```` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Hello , 是 管雷鸣 创造了我。这是我们 网市场云建站系统 的功能插件开发的入门示例,如果您懂Java,可以用此扩展定制您所需要的功能!
```` #### 4. 重新启动项目,进行测试 登陆总管理后台,点开 功能插件 ,点击 “ 入门示例 ”,即可看到下图所示:
#### 至此,功能插件演示完毕! ## 备注:文件创建放置说明 | 分类 | 存放目录 | 示例 | | ------------ | ------------ | ------------ | | Java代码 | src/main/java/com/xnx3/wangmarket/plugin/ | com.xnx3.wangmarket.plugin.learnExample | | 前端页面 | src/main/webapp/WEB-INF/view/plugin/ | src/main/webapp/WEB-INF/view/plugin/learnExample | | 静态资源 | src/resource/static/plugin/ | src/resource/static/plugin/learnExample/ | 项目在运行后,会自动取Java中,加了 @PluginRegister 注解的类,所在的包,将包名取出作为插件ID。而后面的前端页面所在文件夹、以及静态资源所在的文件夹,便都是根据这个插件ID,来进行命名。