芸众商城开发商家让利独立插件

一、插件基础结构
一个标准的插件通常包含以下核心文件与目录:
-
package.json
记录插件的基本信息,如名称、版本、作者、依赖等。 -
callbacks.php
处理插件安装、启用、禁用等生命周期回调。通常在此执行数据库迁移文件的调用。 -
migrations/
存放数据库迁移文件,用于创建、修改数据表结构。 -
src/
插件业务逻辑代码所在目录,所有的 PHP 类都放置于此。 -
views/
存放 Blade 模板视图文件,用于渲染后台或前端页面。 -
src/PluginApplication.php
插件的核心容器类,负责注册各种钩子、监听器、配置项等。是整个插件的入口。
二、订单状态监听
若插件需要响应订单状态变化(例如订单完成时发放分红),可以通过事件监听实现。在 PluginApplication.php 的 boot 方法中注册监听器:
public function boot()
{
// 注册订单完成事件监听
\Event::listen('order.paid', function($order) {
// 处理分红逻辑
});
}
参考文件中第146行附近,可以看到具体的监听注册方式。开发者可以根据需要监听不同的事件(如订单创建、支付、完成、退款等)。
三、收入、余额、积分类型注册
许多插件需要新增自定义的收入类型、余额变动类型或积分类型。在 PluginApplication.php 中,可以在 boot 或其他初始化方法里调用相应 API 完成注册:
// 注册余额类型(参考142行)
\Balance::registerType('dividend', '分红收益');
// 注册积分类型(参考143行)
\Point::registerType('dividend', '分红积分');
// 注册收入类型(参考144行)
\Income::registerType('dividend', '分红收入');
这些类型会出现在系统的资金流水、积分记录中,便于区分不同来源的变动。
四、收入中心配置
为了让插件在会员中心的“推广收入”板块显示自己的收益项,需要实现两个方法:
4.1 getIncomePageItems() —— 定义收入中心页面项
该方法返回一个数组,每一项对应一个页面区块。每个区块可以通过 class 指定一个控制器类,该类负责渲染该区块的内容。其中特别重要的是 isDiy 方法:
public function getIncomePageItems()
{
return [
[
'class' => \Plugin\Dividend\Classes\DividendPage::class,
// 其他配置...
]
];
}
在 DividendPage 类中,可以定义 isDiy 方法。如果返回 true,则需要同时实现 getAppUrl 方法,返回一个自定义的路由链接。该链接通常指向插件前端控制器的方法,例如:
public function getAppUrl()
{
return 'dividend/index'; // 对应 src/frontend/DividendController@index
}
这样,在会员中心点击该收入项时,就会跳转到插件的自定义页面。
4.2 getIncomeItems() —— 定义收入数据项
该方法返回插件产生的具体收入条目类型。例如:
public function getIncomeItems()
{
return [
[
'class' => \Plugin\Dividend\Models\DividendRecord::class,
'name' => '订单分红',
// 其他配置...
]
];
}
这里的 class 通常指向分红数据表对应的模型类,系统将通过该模型查询该类型的收入明细。
五、商品编辑挂件
如果插件需要为商品增加额外的设置项(例如设置该商品是否参与分红、分红比例等),可以通过商品挂件实现。
5.1 注册挂件
在 PluginApplication.php 的 getWidgetItems 方法中注册:
public function getWidgetItems()
{
return [
'vue-goods.dividend' => [
'name' => '分红设置',
'component' => 'dividend-goods-widget', // Vue 组件名
'priority' => 10
]
];
}
键名必须以 vue-goods. 开头,系统会在商品编辑页面自动加载对应的 Vue 组件。
5.2 保存挂件数据
当商品保存时,需要触发插件的保存逻辑。在 PluginApplication.php 的 setConfig 方法中处理:
public function setConfig($goods, $data)
{
// $data 中包含了挂件提交的数据
if (isset($data['dividend'])) {
// 保存分红设置到数据库
}
}
这样就能将挂件中填写的数据与商品关联起来。
六、提现设置挂件
类似商品挂件,提现设置也可以在后台的提现方式编辑页添加自定义配置。只需在 getWidgetItems 中返回以 withdraw. 为前缀的项:
php
复制
下载
public function getWidgetItems()
{
return [
'withdraw.dividend' => [
'name' => '分红提现设置',
'component' => 'dividend-withdraw-widget',
// ...
]
];
}
系统会自动在提现方式编辑页面渲染该挂件,并在保存时同样调用 setConfig 方法(需自行判断并处理)。
七、前端页面开发
分红插件通常需要提供一个独立的前端页面,用于展示用户的累计分红、明细、提现入口等。
7.1 控制器与视图
参考第4点,我们已经在 DividendPage 的 getAppUrl 中定义了路由指向 src/frontend/DividendController@index。那么 DividendController 大致如下:
namespace Plugin\Dividend\frontend;
class DividendController extends \FrontendController
{
public function index()
{
// 获取当前用户的分红数据
$data = [
'total' => ...,
'records' => ...
];
return view('dividend::admin.index', $data);
}
}
7.2 视图文件
视图文件位于 views/admin/index.blade.php。这个文件是完全独立的,开发者可以根据业务需求自由编写 HTML、CSS 和 JavaScript,使用 Vue 或其他前端框架亦可。只需保证数据渲染正确,与后端接口交互正常。
通过以上步骤,你就可以创建一个完整的分红插件,并深度融入系统的商品、订单、会员收入等核心模块。希望本文能帮助你快速上手插件开发。如有疑问,欢迎交流(V:LXC962700)。
更多推荐



所有评论(0)