插件开发入门第一步
可以针对网站管理后台、代理后台、总管理后台,这三种后台进行功能扩展。
而这些扩展的,将在相应后台左侧的 “ 功能插件 ” 中显示。
这里,以一个简单的例子,来讲解如何进行插件功能的扩展。
我们增加一个插件,该插件在总管理后台中,功能插件 菜单下,子菜单名为 **入门示例** ,该插件在网市场云建站系统中注册的唯一 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,来进行命名。
```` #### 4. 重新启动项目,进行测试 登陆总管理后台,点开 功能插件 ,点击 “ 入门示例 ”,即可看到下图所示: