Pro 功能主题实现指南
本章是独立 Pro 安装包的适配参考,不能用于向免费市场版注入 Pro 服务。主题只消费当前站点实际已启用的能力,授权与业务校验由插件完成。
版本识别
<th:block th:with="info=${knowSphereFinder.getPluginInfo()}">
<section th:if="${info.pro}">
<p>这里挂载当前站点已配置的 Pro 模块。</p>
</section>
</th:block>
pro 不等于每个模块启用。版本切换、授权到期、管理员关闭功能以及空数据都要有兜底。Base 兼容 Finder 可能返回 empty、false 或零值对象;HTTP 端点可能不存在或返回 403,不能一概假定 empty。
高级专栏
基础专栏本身属于 Base。Pro 的学习进度和滴灌状态使用 getUserProgress(columnName) 与 getDripStatus(columnName)。详情为 ColumnDetailVo,章节是 chapters;不要使用未定义的 column.articles 或 chapter.locked。
章节状态、试读和用户已购权益是不同维度。公开列表继续过滤未公开文章;不要自行读文章快照来预告草稿内容。
任务与分销
| 场景 | Finder |
|---|---|
| 可用任务 / 我的任务 | getAvailableTasks() / getMyTasks() |
| 单任务详情 | getTask(taskName) |
| 当前分销员 | getDistributorProfile() / isDistributor() |
| 分销统计与设置 | getDistributorStatistics() / getDistributionSettings() |
| 推广链接 / 二维码 | getPromotionUrl(productType, productId) / getPromotionQrCode(productType, productId) |
| 佣金 / 团队列表 | getRecentCommissions(limit) / getTeamMembers(limit) |
二维码字段遵循返回合同;不要默认所有 Base64 字符串已经包含 data:image/... 前缀。用户未开通分销时不生成伪造推广码。
评分、评论打赏及其他独立业务
评分使用 getRatingStatistics(contentType, contentName)、getTopRatedContent(limit);评论打赏统计使用 getCommentRewardStatistics(commentName)、batchGetCommentRewardStatistics(commentNames)。零值统计不能用演示收入填充。
商城、多作者、问答和开放 API 的具体接口参照目标 Pro 安装包的 API 合同;本技能附带 main 合同用于对照,不能证明所有端点已在 release 的具体制品启用。不要把后台管理接口直接开放给读者,也不要将 API 管理令牌嵌入前端。
发布前验证
分别测试 Base、Pro 功能关闭、Pro 功能开启、匿名与普通登录用户。保留试读和支付中的状态,支付完成以服务端确认、重新检查权益为准;前端事件本身不能放行内容。