当前位置: 首页 > news >正文

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

一、插件基础结构

一个标准的插件通常包含以下核心文件与目录:

  • package.json
    记录插件的基本信息,如名称、版本、作者、依赖等。

  • callbacks.php
    处理插件安装、启用、禁用等生命周期回调。通常在此执行数据库迁移文件的调用。

  • migrations/
    存放数据库迁移文件,用于创建、修改数据表结构。

  • src/
    插件业务逻辑代码所在目录,所有的 PHP 类都放置于此。

  • views/
    存放 Blade 模板视图文件,用于渲染后台或前端页面。

  • src/PluginApplication.php
    插件的核心容器类,负责注册各种钩子、监听器、配置项等。是整个插件的入口。

二、订单状态监听

若插件需要响应订单状态变化(例如订单完成时发放分红),可以通过事件监听实现。在PluginApplication.phpboot方法中注册监听器:

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.1getIncomePageItems()—— 定义收入中心页面项

该方法返回一个数组,每一项对应一个页面区块。每个区块可以通过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.2getIncomeItems()—— 定义收入数据项

该方法返回插件产生的具体收入条目类型。例如:

public function getIncomeItems() { return [ [ 'class' => \Plugin\Dividend\Models\DividendRecord::class, 'name' => '订单分红', // 其他配置... ] ]; }

这里的class通常指向分红数据表对应的模型类,系统将通过该模型查询该类型的收入明细。

五、商品编辑挂件

如果插件需要为商品增加额外的设置项(例如设置该商品是否参与分红、分红比例等),可以通过商品挂件实现。

5.1 注册挂件

PluginApplication.phpgetWidgetItems方法中注册:

public function getWidgetItems() { return [ 'vue-goods.dividend' => [ 'name' => '分红设置', 'component' => 'dividend-goods-widget', // Vue 组件名 'priority' => 10 ] ]; }

键名必须以vue-goods.开头,系统会在商品编辑页面自动加载对应的 Vue 组件。

5.2 保存挂件数据

当商品保存时,需要触发插件的保存逻辑。在PluginApplication.phpsetConfig方法中处理:

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点,我们已经在DividendPagegetAppUrl中定义了路由指向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)。

http://www.jsqmd.com/news/453782/

相关文章:

  • python flask水果购物商城vue
  • 下载vscode调试环境并试着运行github上的项目
  • 收藏 |小白程序员必看:传统编程、Workflow与Agent的区别,轻松入门大模型
  • python flask体育用品球鞋商店购物商城系统vue
  • 宠物医院管理系统|基于springboot + vue宠物医院管理系统(源码+数据库+文档)四、其他项目参考五、代码参考
  • 【收藏】金三银四不等人!2026 春招上岸指南:大模型才是普通人的破局密钥
  • 后续漏洞利用的关键前提☞WAF指纹识别
  • 课程2,如何使用EtherCAT抓包仪进行DC抖动分析
  • SpringCloud微服务架构通俗解析
  • 八、centos修改静态网络的方法
  • 开源吐槽大会:开发者集体破防现场
  • day107(3.8)——leetcode面试经典150
  • 计算机网络基础知识详解:MAC地址、IP地址、交换机、路由器、DNS与CDN
  • 《onlyoffice的安装和使用》
  • BOT 上线开启生态新篇:跨链桥、DEX 同步就位,BOT Chain 驶入价值捕获快车道
  • FireRed-OCR 开源:2B 小模型如何“逆袭” 300B 巨头?
  • 大模型小白指南2 -- 小龙虾(openclaw)的本地部署(不花钱!)
  • 接口结构天天变?Spring Boot 动态接收请求体的终极解决方案来了!
  • 飞书OpenClaw插件太香了!自动写文+整理表格+按评论修改保姆级教程
  • 这4个核心能力,AI永远学不会!产品经理请收好这份“保饭碗”指南!
  • OpenClaw 2.0保姆级教程:接入MemOS插件,Token消耗降72%,跨会话记忆不再忘!
  • 简单使用Claude Code实践开发一个笔记应用
  • 4-27 二维数组中每行最大值和每行和
  • A deep learning model to predict RNA-Seq expression of tumours from whole slide images
  • 2026年电商ERP系统权威榜单发布:五大服务商综合实力深度评测 - 品牌推荐
  • 【2026-02-25】连岳摘抄
  • AI Agent 学习清单I
  • ssm基于java的社区爱心捐赠系统(源码+文档+调试+vue)
  • AttributeError: type object ‘BeautifulSoup‘ has no attribute ‘__version__‘ 已解决
  • 2026 电池充放电设备厂家选型指南:从技术逻辑到工业级排名解析 - 深度智识库