-
Notifications
You must be signed in to change notification settings - Fork 0
zh develop
zxy19 edited this page Jul 13, 2024
·
3 revisions
该拓展的附属拓展开发需要同时开发前端和后端代码。
该拓展提供了 Xypp\Store\AbstractStoreProvider
作为拓展类。商品提供类需要拓展这个类,并实现其中的抽象方法。
该类中的主要方法如下
public function expire(PurchaseHistory $item,ExpireContext $context): bool
{
// 当已购项删除或过期时被调用。
// 在此处进行和已购项目相关的清理工作
return true;
}
public function purchase(StoreItem $item, User $user, PurchaseHistory|null $old = null, PurchaseContext $context): array|bool|string
{
// 当用户购买时被调用
// 在此处标记用户为已购买的用户或进行其他在购买过程中生效的操作
// 返回 `false` 或抛出错误代表购买过程未完成,购买将被回滚
// return false;
// $context->exceptionWith("xxxxx.forum.xxxx.xxx");
// 或者返回一个字符串,作为已购项目的 data 字段值
// 如果发生了更新,则 Old 会作为更新前的已购项目被传入
return true;
}
public function useItem(PurchaseHistory $item, User $user, string $data, UseContext $context): bool
{
//[可选]
// 如果希望商品购买后可以被使用请实现该方法。
// 返回 true 表示使用成功
return false;
}
注意:有许多方法/成员对商店处理该物品的方式产生影响,请阅读代码Xypp\Store\AbstractStoreProvider
或者,你也可以使用一个简单的创建方法
(new \Xypp\Store\Extend\StoreItemProvider())
->simple(
"fake-item-test",
function (StoreItem $item, User $user, PurchaseHistory|null $old = null, PurchaseContext $context): array|bool|string {
return true;
},
function (PurchaseHistory $item, User $user, string $data, UseContext $context): bool {
return true;
}
)
在 purchase
和 use
方法调用过程中,你可以使用 $context
变量来调用一些实用方法。在其他情况下,你可以使用 IOC 来获取 ProviderHelper
和 StoreHelper
类,他们会提供和商店有关的一系列方法。
前端部分大多数工作都被 addFrontendProviders
完成。该方法将自动向 Store
的各个前端类注入商品提供者信息。
有两种方法来调用 Store
暴露的前端方法
- Flarum推荐的,直接引入依赖
按照下述步骤操作
- 修改webpack.config.js
module.exports = require('flarum-webpack-config')({
useExtensions: ['xypp-store']
});
- 修改tsconfig.json
{
"compilerOptions": {
"paths": {
//加入这行来使用我们的类型标注
"@xypp-store/*": [
"../vendor/xypp/store/js/dist-typings/*"
]
}
}
}
- 引入依赖
import { addFrontendProviders } from "@xypp-store/forum"
- 使用助手类直接从flarum变量中导出
见 js/src/forum/StoreHelper.ts
Store
还暴露了 PurchaseHelper
和 UseHelper
。你可以使用这些工具,在用户不打开商店页面的情况下发起购买/使用。
相关用法见注释。