KnowSphere 页面开发指南

页面与路由的职责

页面数据来源注意事项
原生文章详情Halo post 变量和已处理正文不取原始快照绕过付费墙
原生分类、标签列表Halo 原生列表、插件集合付费墙permalink 优先,避免写死前缀
会员套餐页listMembershipPlans()通过已注册路由或自定义页面模板承载
专栏目录listColumns、getColumnDetail只显示已发布公开数据
我的订单、钱包、已购当前用户 Finder 或 UC API分页 items、身份隔离、登录提示
评论区与签到插件 Web Components单次挂载、事件清理、Cookie 同源
Pro 任务、分销等对应 Pro Finder / API版本、功能关闭和空态均需处理

主题文件、Halo 自定义页面和插件控制台 UC 的 URL 不能互相替代。主题创建 templates/uc/orders.html 不会自动改变插件的 UC 路由。

模板字段

<article th:with="detail=${knowSphereFinder.getColumnDetail(columnName).block()}">
  <p th:if="${detail == null}">专栏不存在或尚未公开</p>
  <th:block th:if="${detail != null}">
    <h1 th:text="${detail.column.displayName}"></h1>
    <p th:if="${#lists.isEmpty(detail.chapters)}">暂无公开章节</p>
    <a th:each="chapter : ${detail.chapters}"
       th:href="${chapter.permalink}" th:text="${chapter.title}"></a>
  </th:block>
</article>

columnName 由当前已确认的路由模型或主题调用方传入,本例不宣称插件自动提供名为 columnName 的全局变量。ChapterVo 使用 permalink、isFreePreview、dripStatus 等实际字段,不使用虚构的 locked。

交互与布局

  • 使用真实空态、加载态、错误态,不填充虚构订单或收入。
  • 付款中禁止重复提交;网络恢复后查服务端状态,不能仅改按钮文字。
  • 手机端卡片保持可读;键盘可访问按钮和表单,错误提示关联字段。
  • 公共页面可以缓存公共目录;用户权益、钱包和订单部分按用户渲染。
  • 主题脚本卸载组件时清理事件和轮询,避免切换页面后继续请求。

组件属性、事件、CSS 变量见 组件参考,路由规划见 脚手架。