主题和区块创作技能

用于构建 Discourse 主题和区块组件的 Claude Code 技能库:

:toolbox: 包含内容

主题创作技能 — 涵盖构建 Discourse 主题的完整范围:使用 discourse_theme CLI 进行脚手架搭建、SCSS 架构、视口库、本地化、设置、修饰符、值转换器、图标以及 CSS 变量。图标、变量和转换器的详细参考文件单独提供,可按需加载。SKILL.md

区块创作技能 — 涵盖区块 API 的主题端内容:使用 @block 装饰器编写区块组件、定义参数(args)模式、将区块渲染到可用的核心出口(outlets)、条件判断、容器区块和布局分组,以及将主题翻译和设置集成到区块参数中。SKILL.md

示例主题 — 一个使用区块构建自定义主页的可用主题,展示了出口、条件和布局组合的实际模式。


:jigsaw: 关于区块 API

区块 API 是 Discourse 用于在主题和插件中构建模块化、可组合 UI 组件的新框架。区块是注册到命名出口(如 homepage-blockshero-blockssidebar-discovery)的 Glimmer 组件,并且可以根据路由、用户、视口、站点设置或插件可用性条件性地显示。

该系统的一个关键优势在于区块具有小而专注的作用域以及一致的模式。这使其非常适合 AI 辅助开发:具备区块技能的模型可以在单次操作中完成区块组件的脚手架搭建、将其注册到出口并连接条件。

本仓库中的示例主题展示了一个根据可用插件和内容自适应调整的主页。以下是基本主页的样貌,包含一个英雄区块和一个精选话题列表:

当满足额外条件时(配置了精选标签、Discourse Events 插件已激活且 Discourse Leaderboard 插件可用),额外的区块会被条件性地渲染到布局中:

区块不仅限于主页。示例主题还使用 sidebar-blocks 出口添加主页链接,使用 sidebar-discovery 出口添加特定于分类的侧边栏内容,并在分类页面顶部使用 category-banner 区块:

DevTools 中的区块检查器会在页面上叠加显示出口标签和区块标识符。这使得理解布局结构和调试渲染位置变得非常容易:


:art: 与设计平台 MCP 配合使用

这些技能与设计平台 MCP(如 Penpot 或 Figma MCP)配合效果极佳。连接其中一个后,Claude 可以直接从设计文件中读取组件规范和设计令牌,并使用该技能的约定进行实现。这缩短了设计与代码之间的循环,尤其是在基于结构化设计系统工作时。


:fork_and_knife: 分叉并调整

技能中的一些约定更多是基于偏好而非严格规范,例如 SCSS 文件夹架构。您可以分叉该仓库,并根据自己的工作流和约定调整这些技能。


:speech_balloon: 分享您的成果

请尝试一下并告诉我们您的体验!我们很想知道您如何使用这些技能、用它们构建了什么以及它们存在哪些不足。欢迎提供反馈、修正意见或进行分叉。

会有专门的 Blocks 主题帖吗?还是这就是?

如果是后者,或许可以加一些代码片段?或者 plugin-api.gjs 文件中的内容就是当前的文档?

谢谢。

仍然会有涵盖完整 Blocks API 的文档,包括核心和插件中的实现。关于使用 Blocks 进行主题定制,SKILL.md 应该已经涵盖了所有相关方面。它内容精炼且非常易读。

示例主题中包含了初始化器文件和 Blocks。初始化器文件为每个 BlockOutlet 声明了布局:https://github.com/discourse/discourse-theme-skills/tree/main/javascripts/discourse/api-initializers。