Skip to content

新插件开发方式

  1. 通过神码开发工具,生成插件结构包
  2. 在application/model/Newplugin.php注册插件
php
$register_hook_plugin_list添加插件名称

原则

  1. 尽可能与插件相关的代码都在插件包(除一些特别需求,暂时无法做到外)
  2. 数据表都要在插件包的install.php,upgrade.php
  3. 前端该插件的所有页面必须要包在一个以插件名称命名的目录下。

工作原理

  1. 首先不同的插件有自己的命名空间
  2. 通过thinkhp5的hook的方式来解耦代码
  3. hook将逐步添加。
  4. hook所传的参数将会逐层传递。

在新插件里使用new admin的model()的with函数需注意

php
   //第一个参数,不带.表示model的命名空间为app\model,带.表示前缀表示插件名称,命名空间为app\plugins\{plugin_name}\model
   $table->model()->with("yimei.yimeiplus","level");

在新插件里使用new admin的select联动函数需注意

php
    //yimei为插件名称,Api_yimei为apiYimei的controller
   $form->select('level_select', 'level_select')
       ->options([1=>"等级1",2=>"等级2",3=>"等级3"])->load("pics","yimei.Api_yimei|getPics");

判断插件是否开启

php
   //yimei为插件名称
   Newplugin::isOpen("yimei");

Hook使用

php
  //在插件目录下CustomHook.php
   public static function registerHook()
   {
       Hook::add(Newplugin::H_orderStatusChange, self::class);
       ...
   }
   //不接收传送参数(不修改)
   public function orderStatusChange($params)
   {

       print_r("接收参数\n");
       print_r($params);

   }
   //修改传送的参数
  public function orderStatusChange(&$params)
  {
      print_r("接收参数\n");
      print_r($params);

  }

Hook注解

php
    //application/model/Newplugin.php
    public const  H_orderStatusChange= "orderStatusChange";  //订单支付成功或订单完成时
    public const  H_openCustomPusherInfo= "openCustomPusherInfo";  //是否开启权益页-自定义等级展示
    public const  H_getCustomPusherInfo= "getCustomPusherInfo";  //获取权益页-自定义等级展示
    public const  H_getGoodsUnitPrice= "getGoodsUnitPrice";   //获取商品单价
    public const  H_wxappUrlconfig= "wxappUrlconfig";   //DIY链接(wxapp_url_config.php)
    public const  H_homeUrlconfig= "homeUrlconfig";   //DIY链接(admin/controller/Chome.php)
    public const  H_userAfterInsert= "userAfterInsert";   //用户创建之后
    public const  H_setParents= "setParents";   //设置上下级关系时
    public const  H_hasGoodsAreaType= "hasGoodsAreaType";  //是否开启商品区功能
    public const  H_goodsAreaList= "goodsAreaList";  //商品区列表

新添加Hook的方法

php
    //1.在application/model/Newplugin.php下命令一个常量值(规则如下)
    public const  H_orderStatusChange= "orderStatusChange";  //订单支付成功或订单完成时
    //2. 在触发的位置添加代码
    $order = [
        "order_id" => $order_id,
        "type" => $type,
        "user_id" => $user_id,
        "flag" =>$flag,
    ];
    Hook::listen(Newplugin::H_orderStatusChange, $order);

前端API-调用新插件的方式

javascript
//ningming为插件名称
   app.api.postWithPlugin('api_ningming|getGridTeamList', "ningming", param).then(res => {
      this.setData({
          data_list: res.data,
      })
  }).catch(res => {
      app.tips(res)
  })

注意事项

  1. 可参考(yimei,ningming)两个项目的代码方式