Skip to content

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;
            }
        )

后端工具

purchaseuse 方法调用过程中,你可以使用 $context 变量来调用一些实用方法。在其他情况下,你可以使用 IOC 来获取 ProviderHelperStoreHelper 类,他们会提供和商店有关的一系列方法。

前端

前端初始化

前端部分大多数工作都被 addFrontendProviders 完成。该方法将自动向 Store 的各个前端类注入商品提供者信息。

有两种方法来调用 Store 暴露的前端方法

  • Flarum推荐的,直接引入依赖

按照下述步骤操作

  1. 修改webpack.config.js
module.exports = require('flarum-webpack-config')({
    useExtensions: ['xypp-store']
});
  1. 修改tsconfig.json
{
  "compilerOptions": {
    "paths": {
      //加入这行来使用我们的类型标注
      "@xypp-store/*": [
        "../vendor/xypp/store/js/dist-typings/*"
      ]
    }
  }
}
  1. 引入依赖
import { addFrontendProviders } from "@xypp-store/forum"
  • 使用助手类直接从flarum变量中导出

js/src/forum/StoreHelper.ts

前端工具

Store 还暴露了 PurchaseHelperUseHelper。你可以使用这些工具,在用户不打开商店页面的情况下发起购买/使用。

相关用法见注释。

Clone this wiki locally