Base 功能主题实现指南

免费 Base 与市场版 Base 无需产品激活。内置支付不要求安装授权核心或外部支付插件。插件本身闭源,不影响使用公开 Finder 和 HTTP API 开发主题。

功能范围

Base 包含内容访问控制、基础专栏、会员、订单与支付订单导出、钱包、优惠券、积分与签到、活动礼包、自定义评论区和基础业务统计。独立 Pro 业务不因主题显示按钮或修改配置而启用。

内容访问

输出 Halo 已处理正文,保留插件生成的付费墙。checkAccess('post', metadataName) 返回 hasAccess、unlockMethods、试看设置,以及命中规则和购买目标。集合规则下购买目标可能是专栏/分类,而非当前文章;不要把当前 slug 直接当商品 ID。

会员

getMembershipStatus() 的 active 表示有效会员;到期时间为 expireAt。listMembershipPlans() 返回套餐 name、title、price、durationDays、allBenefits 等。不要把 autoRenew 字段存在理解为网关已支持自动扣款。

基础专栏

<section th:with="columns=${knowSphereFinder.listColumns(1, 12).collectList().block()}">
  <p th:if="${#lists.isEmpty(columns)}">暂无已发布专栏</p>
  <article th:each="column : ${columns}">
    <h2 th:text="${column.displayName}"></h2>
  </article>
</section>

listColumns 返回 Flux,虽然签名含 page/size,不应据此自行宣称存在总页数;以当前服务端实际分页行为为准。专栏详情使用 getColumnDetail(name),读取 column 和 chapters;章节地址使用 permalink。

我的订单、钱包与优惠券

使用 listMyOrders、getMyWallet、listMyCoupons 和 listMyPurchases。分页结果的列表在 items 中。空 Mono 的 .block() 可返回 null,匿名用户不能误显示成其他人的缓存数据。

签到与评论

<ks-checkin-calendar></ks-checkin-calendar>
<ks-comment-widget group="content.halo.run" kind="Post"
  version="v1alpha1" th:attr="name=${post.metadata.name}"></ks-comment-widget>

先确认主题尚未挂载其他评论组件。匿名评论遵守 Halo 审核与允许匿名设置。评论解锁只认成功提交浏览器的签名凭证,隐藏、删除或尚未审核的评论不授予资格。

活动礼包与支付

活动礼包已有插件 UC 页面与功能入口。主题链接应指向当前安装版本实际 UC 路由,不另写绕过资格校验的发奖接口。支付采用人民币;不将符号换成美元而保留 CNY 结算。

详见 组件、HTTP 合同 和 升级说明。