加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

niushop插件开发流程是怎么样?

(2019-01-19 10:36:31)
标签:

niushop插件

niushop插件开发流程

niushop插件就是一个特殊的继承了 Addons抽象类的子类。必须实现 install和uninstall方法。 然后必须有一个自己的info属性,作为niushop插件自己的信息。
具体info属性配置如下:

public $info = array(
        'name'            => 'wxtemplatemsg',   //插件名称标识
        'title'           => '微信模板消息',     //插件中文名
        'description'     => '微信模板消息',     //插件概述
        'status'          => 1,                 //状态 1启用 0禁用
        'author'          => 'niushop',         //作者
        'version'         => '1.0',             //版本号
        'has_addonslist'  => 0,                 //是否有下级插件 例如:第三方登录插件下有 qq登录,微信登录
        'content'         => '',                //插件的详细介绍或使用方法
        'config_hook'     => 'wxtemplatemsg',   //设置文件单独的钩子
    );

  name、titile、description、status、author、version这6个是必须的。到时候后台列表里在未安装时会读取插件信息,显示出来。status为1或者0,表示安装插件后是否立即启用。插件被禁用,钩子处的插件不会被执行该同名方法,并且插件后台列表里不会出现该插件的列表。
  install和uninstall方法用于后台插件安装和卸载时候调用。返回true或者false用于告诉后台我安装卸载的准备工作是否做好了。比如我安装时候创建了某些表,创建成功可以安装,不成功提示错误。卸载前应该将安装时做的操作恢复到安装前状态,比如删除已经安装上的表。 其次,插件被安装后才能配置插件,卸载后会同时去除钩子处挂载的插件名,安装会添加钩子对应的插件名。
   安装的时候,插件挂载插件名的原理是系统读取当前插件的入口文件中的所有方法名,如果其中的某个方法和系统当前的钩子名称相同,则会挂载到当前钩子下。如果是手动在数据库中的钩子表(sys_hooks)中自行挂载插件,运行时就需要先删除runtime文件下的cache。
niushop插件运行流程:
 hook函数调用Hook类的listen静态方法触发钩子->获取钩子挂载的开启的插件->执行对应插件实现的钩子同名方法(这个在InitHooks函数会初始化)
代码中就是如下过程:
1.hook("orderCreateSuccess", ['order_id' => $order_id]);多个参数,请封装成数组,传入hook函数的第二个参数。
2.然后hook函数遍历 Hook类里的$tag属性,知道有哪些插件可被调用,接下来去读取配置和状态,启用就去执行钩子。
3.执行钩子会查询当前钩子挂载的插件。
4.然后执行插件中实现钩子的同名方法。

外部url 访问niushop插件里的控制器:
1. 单插件调用控制器
   addons_url('插件名://控制器名/方法名') 。
2. 多插件调用控制器
   addons_url('插件名://独立插件名/控制器名/方法名') 。
    制器里必须继承插件入口类,不能继承后台的。

插件作为菜单:

public $menu_info = array(
    [
        'module_info'          => '模板消息设置',        //模块名称
        'parent_module_name'   => '微信',               //上级模块名称    用来确定上级目录
        'last_module_name'     => '分享内容设置',        //上一个菜单名称  用来确定菜单排序
        'is_menu'              => 1,                    //是否是菜单
        'is_dev'               => 0,                    //是否是开发模式可见
        'desc'                 => '模板消息插件菜单',    //菜单描述
        'module_picture'       => '',                   //图片(一般为空)
        'icon_class'           => '',                   //字体图标class(一般为空)
        'is_control_auth'      => 1,                    //是否有控制权限
        'hook_name'            => 'wxtemplatemsg',      //钩子名称(需要该钩子调用的页面)
    ],
);

niushop插件作为菜单是为了让用户更方便快捷的配置插件,不必要每次都在扩展中配置,用户可以放在自己想要的位置。在niushop插件入口文件中配置好,安装时会自动安装,安装完成不可以修改。

niushop插件开发的注意事项
  1. niushop插件的基础是物理文件,所以niushop插件类的结构一定要和官方一致。开发阶段不要随便删除文件,导致系统运行不正常。要删除插件请先后台卸载插件后再删除物理文件,否则钩子表有脏数据或者叫未挂载的插件,进钩子列表删除。
  2. 扩展这块属于开发人员负责,所以钩子的编辑更新,只有超级管理员可以管理,其他人没有权限编辑的。乱加、乱删都会影响系统稳定性和效率。最后给大家推荐一款Niushop商品采集插件,下载地址:http://www.8sk.cn/Download/735.html,希望对大家有所帮助。
原文地址:http://www.niushop.com.cn/document.html?class_id=19&dir_id=114&id=117

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有