- 🏠 简介
- 🔌 api接口
-
🔧 插件开发
- 介绍
- 插件优势
- 新建插件
- 技术栈
- 插件开发规范
- 插件目录结构
- model 层开发
- service 层开发
- api 接口开发
- menu 菜单开发
-
event 事件钩子开发
- 开发指南
- 常用事件
- SiteInit 站点初始化事件
- AddSiteAfter 站点创建后事件
- MemberRegister 会员注册后事件
- MemberLogin 会员登录后事件
- PayCreate 支付创建事件
- PaySuccess 支付成功事件
- RefundSuccess 退款成功事件
- TransferSuccess 转账成功事件
- BottomNavigation 底部导航事件
- NoticeData 消息模板数据内容事件
- GetQrcodeOfChannel 创建二维码事件
- ExportDataType 导出数据类型事件
- ExportData 导出数据源事件
- GetPosterType 海报类型事件
- GetPosterData 海报数据事件
- ShowCustomer 应用管理加载事件
- GetWechatTransferTradeScene 微信支付转账场景事件
- ThemeColor 主题风格事件
- initWap 手机端初始化加载事件
- dict 数据字典开发
- layout 自定义布局开发
- job 消息队列和计划任务开发
- notice 消息发送开发
- printer 小票打印模板开发
- export 数据导出开发
- diy 自定义组件/页面装修开发
- diy 自定义表单组件开发
- poster 自定义海报开发
- icon 引入图标
- 支付方式开发
- upgrade 插件版本升级
- 打包插件
- 授权信息变更回调通知
- 官网上架
- 📝 二次开发须知
- 👨💻 二次开发指导
-
🎬 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
事件钩子开发
GetPosterType 海报类型事件钩子
使用场景:定义海报类型,用于添加海报时选择海报类型,以及后续业务处理。插件可以添加自定义的海报类型。

在事件配置中注册
在插件的 app/event.php 文件中注册事件监听器:
关键代码:
return [
// ...
'GetPosterType' => ['addon\shop\app\listener\poster\ShopPosterType'],
// ...
];
实现事件监听器
创建事件监听器类:
关键代码:
<?php
declare ( strict_types = 1 );
namespace addon\shop\app\listener\poster;
class ShopPosterType
{
/**
* 海报
* @param array $data
* @return array
*/
public function handle($data = [])
{
return [
[
'type' => 'shop_goods', // 海报类型关键字
'addon' => 'shop', // 所属插件key标识
'name' => '商品海报', // 海报类型名称
'desc' => '推广商品,分享后进入商品详情页', // 海报类型描述
'icon' => 'addon/shop/poster/type_shop_goods.png' // 海报预览图
],
[
'type' => 'shop_point_goods',
'addon' => 'shop',
'name' => '积分商品海报',
'desc' => '推广积分商品,分享后进入积分商品详情页',
'icon' => 'addon/shop/poster/type_shop_goods.png'
]
];
}
}
GetPosterData 海报数据事件钩子
使用场景:根据不同的海报类型,提供海报数据,自行编写业务逻辑相关代码。
在事件配置中注册
在插件的 app/event.php 文件中注册事件监听器:
关键代码:
return [
// ...
'GetPosterData' => ['addon\shop\app\listener\poster\ShopPoster'],
// ...
];
实现事件监听器
创建事件监听器类:
关键代码:
<?php
declare ( strict_types = 1 );
namespace addon\shop\app\listener\poster;
use app\service\core\sys\CoreSysConfigService;
/**
* 商品海报数据
*/
class ShopPoster
{
/**
* 商品海报
* @param $data
* @return array
*/
public function handle($data)
{
$type = $data[ 'type' ];
if ($type == 'shop_goods') {
// 商品 海报模板数据
$site_id = $data[ 'site_id' ];
$param = $data[ 'param' ];
$sku_id = $param[ 'sku_id' ] ?? 0;
$mode = $param[ 'mode' ] ?? '';
$url_data = [];
if ($mode == 'preview') {
// 预览模式
$url_data = [
[ 'key' => 'sku_id', 'value' => $sku_id ]
];
$return_data = [
'nickname' => '会员昵称',
'headimg' => 'static/resource//markdown/niucloud-admin-saas/images/default_headimg.png',
'goods_name' => '商品名称',
'goods_price' => '¥369.00',
'goods_img' => 'addon/shop/goods_template.png',
'url' => [
'url' => ( new CoreSysConfigService() )->getSceneDomain($site_id)[ 'wap_url' ],
'page' => 'addon/shop/pages/goods/detail',
'data' => $url_data,
],
];
return $return_data;
}
$return_data = [
'goods_name' => '商品名称',
'goods_price' => '¥100.00',
'goods_img' => 'addon/shop/goods_template.png',
'url' => [
'url' => ( new CoreSysConfigService() )->getSceneDomain($site_id)[ 'wap_url' ],
'page' => 'addon/shop/pages/goods/detail',
'data' => $url_data,
],
];
if (!empty($member_info)) {
$return_data[ 'nickname' ] = mb_strlen($member_info[ 'nickname' ]) > 10 ? mb_substr($member_info[ 'nickname' ], 0, 7, 'utf-8') . '...' : $member_info[ 'nickname' ];
$return_data[ 'headimg' ] = $member_info[ 'headimg' ];
}
return $return_data;
} elseif ($type == 'shop_point_goods') {
// 积分商品 海报模板数据
}
}
}
框架已封装获取海报的方法,代码位置如下:
niucloud\app\service\core\poster\CorePosterService.php
