前言

插件目录

准备工作

命名规范

插件模块

变量配置

参数读取

嵌入开发

安装脚本

卸载脚本

注意事项

前言

海盗拥有一套较为完善的插件机制。合理使用内置插件机制,您可以更好的将自己的个性化功能需求无缝整合到海盗产品并保持代码独立而易于维护。通常情况下,海盗系统的后续产品版本升级并不会直接影响插件的可用性。

故我们鼓励通过基于海盗插件机制进行个性化需求定制和研发。但请注意,过多的安装外部插件可能对系统性能有较大影响。

插件目录

官方建议的插件目录如下:


└─identifier/ 插件目录
 ├─include/ 
  ├─ hook.inc.php  插件注册(按需)
  └─ cache.inc.php 缓存接口(按需)
 ├─hooks/
  └─hook.class.php 嵌入脚本(按需)
 ├─config.xml   安装更新配置文件(必需)
 ├─template/ 模版目录(按需)
 ├─xxx.inc.php   访问接口(按需)
 ├─install.php 安装脚本(按需,根据config.xml定义安装脚本名称)
 ├─upgrade.php 升级脚本(按需,根据config.xml定义升级脚本名称)
 └─install.php 卸载脚本(按需)

准备工作

在编写插件之前,您应当首先对插件实现的流程有一个大致的了解,以下是我们推荐的插件编写流程:

  1. 插件功能评估并确定最终需求;
  2. 插件概括性设计(包括不限于菜单、参数及数据库结构等);
  3. 编写插件代码及测试;
  4. 整理插件说明书,包括适用版本、功能概述、兼容性声明、使用说明及安装和卸载方法等;
  5. (公开)发布您的插件;

命名规范

为了更好的统一和规范插件与系统程序编码风格,海盗系统按照如下规范对程序及模板进行命名约束,请在设计插件时尽可能遵循此规范:

插件模块

插件模块共分为三种类型:

注意

变量配置

通用情况下,我们将插件变量配置保存在hd_appvar表中,同步保存在缓存文件plugins.php中,您可以直接通过model('admin/app','service')->get_plugins()来获取当前插件的配置信息。 系统默认内置支持如下类型的变量:

如果您有更好的建议,欢迎与我们取得联系,我们会优先并慎重考虑您的意见,根据产品自身情况酌情开放更多的接口供开发者使用。

参数读取

在海盗系统中,所有插件的配置可以通过model('admin/app','service')->get_plugins()来获得,插件配置信息将以数组形式返回。

嵌入开发

海盗系统在模板及业务功能中预埋了钩子(hook)。通过插件的嵌入脚本对这些钩子进行拦截、对所拦截的内容进行个性化改造来实现对业务过程、返回结果的处理。建议钩子集成plugin类,来通过$this->config来获取插件数据,通过$this->vars来获取插件的配置变量。

<?php
class plugin_identifier extends plugin {
 public function hookid() {
 }
}

其中identifier 代表当前插件的唯一标识,而 hookid 则代表嵌入点的名称,我们有固定的一些嵌入点。

内置功能嵌入点

嵌入点 说明
pre_system 系统初始化
pre_control 控制器方法之前
post_control 控制器方法之后
pre_output 模板渲染之前
tmpl_compile 模板编译
pre_input 变量输出之前
member_init 用户数据初始化
pay_success 第三方支付成功后回调
email_validate 邮箱验证
register_validate 注册验证
mobile_validate 手机验证
money_change 余额变更
after_login 用户登陆后
after_register 用户注册后
create_order 创建订单
confirm_order 确认订单
skus_delivery 订单商品发货
delivery_finish 确认收货
before_cart_add 加入购物车之前
no_login 登陆之前
cart_lists_extra 购物车列表输出之前
order_log_add 写入订单日志
order_parcel_create 生成发货单之前
order_parcel_log_create 生成发货单日志之前
carts_extra 下单时额外的结算数据
build_order_info 主订单数据创建
order_order_create_sub 子订单数据创建
order_create_skus 订单商品表数据创建
order_sku_records 购买记录输出之前

内置默认模板嵌入点

嵌入点 说明
global_header 公共头部
global_footer 公共底部
left_site_bar 公共头部顶部左侧菜单
right_site_bar 公共头部顶部右侧菜单
brand_left 品牌详情页左侧
consult_top 咨询页面顶部
detail_goods_prom_info 商品详情页促销信息
detail_goods_operate 商品详情页加入购物车按钮后
detail_goods_info 商品详情页商品概况
detail_extra_detail 商品详情页右侧底部
lists_left 商品列表页左侧
lists_order 商品列表页排序
search_top 搜索页面顶部
member_common_header 会员公共页面头部
account_info_extra 会员中心用户信息
account_box_extra 会员中心底部
before_login_btn 登陆页提交按钮之前
login_box_footer 登陆页提交按钮之后
menu_account_extra_menu 账户设置页左侧菜单
member_order_lists_left 会员首页左侧菜单订单信息底部
member_extra_lists 会员首页左侧菜单信息中心底部
order_detail_header_extra_info 订单详情页头部
order_detail_info 订单详情页订单信息底部
before_register_btn 注册页注册按钮之前
cart_header_extra_info 购物车详情页头部
cart_settlement_footer 购物车详情页底部
settlement_middle_left 订单结算页优惠信息底部
settlement_down_right 订单结算页结算信息底部
payment_between_order 订单提交成功页顶部

内置wap端模板嵌入点

嵌入点 说明
wap_global_footer 公共底部
wap_header 公共头部
detail_price_right 商品详情页商品价格底部
wap_goods_detail_extra 商品详情页商品促销信息底部
wap_goods_detail_footer 商品详情页底部
wap_member_index_extra_info 会员中心首页菜单底部
wap_login_footer 登陆页底部
wap_cart_settlement_footer 购物车详情页底部
wap_settlement_extra 订单结算发票信息底部
wap_settlement_info 订单结算页底部
wap_settlement_send_time 选择支付方式提交按钮之前

另外为了增强系统的扩展性,我们还在一些类中预埋了钩子。比如在form.class.php类中,我们在编辑器、文本框、选择框等输出之前都分别埋了钩子,用于开发者替换编辑器、改变文本框、选择框的样式,不用去全站修改这些内容,一键实现替换。

而在默认模版中,我们也在具有拓展空间的地方预埋了钩子。如果您自己开发或购买了其他模版,请一定要对照默认模版,在您的模版里也预埋钩子。模版中预埋钩子形如{hook/hookid}。

如果您认为目前预埋的钩子无法满足您的开发需求,请一定要联系我们增加钩子

安装脚本

若您的插件安装、升级涉及到数据表、缓存、新增文件等,那么需要您在插件中增加安装、升级脚本。通常情况这样约定的:

插件作者只需要在插件安装配置的config.xml文件结尾的地方加上相关的配置即可

  <item id="installfile"><![CDATA[install.php]]></item>
        <item id="upgradefile"><![CDATA[upgrade.php]]></item>
</item>
</root>

为了方便开发者,我们也为安装、升级数据库文件的执行提供了便利,您可以像上述一样配置安装、升级的sql文件:

  <item id="installsql"><![CDATA[install.sql]]></item>
        <item id="upgradesql"><![CDATA[upgrade.sql]]></item>
</item>
</root>

在您创建安装sql:install.sql,在安装时会自动执行安装sql中的sql语句。这里的sql统一用hd_为前缀,我们会在安装时对改变前缀的数据表统一处理,无需担忧。

卸载脚本

插件作者需在插件目录创建uninstall.php为卸载脚本,uninstall.php为卸载sql。这里无需像安装和升级一样定义。

注意事项

插件的前台访问接口,因全部使用外壳调用,请务必在第一行加入。

if(!defined('IN_PLUGIN')) {
 exit('Access Denied');
}

后台程序第一行加入:

if(!defined('IN_ADMIN')) {
 exit('Access Denied');
}

以免其被 URL 直接请求调用,产生安全问题。

在线咨询

服务时间:9:00 - 18:00

请选择您需要咨询的内容

如果您有以下问题请反馈社区

好的建议或意见

使用过程中遇到的问题

使用过程中遇到的BUG

点击进入社区
400专线 周一至周五9:00-18:00
400-600-2042