SuperAPI AI 工具集

blutui-canopy-blocks

前端与建站

查看项目

更新于 10-16 08:29

技能介绍

用途

Canopy Blocks 让开发者把整个页面区块构建为可复用的模板。开发者定义区块可以呈现的样子,内容编辑者则把区块添加到页面、填写其设置,并在 Canopy 编辑器中排列它们。这样可以在代码与内容之间保持清晰的分离。

Canopy Blocks 取代了已废弃的 cms_* Canopy 元素(cms_text、cms_heading、cms_image 等)。新工作应始终使用区块模板。

主要能力

  • 区块模板:每个 .canvas 文件定义一个区块模板,放在 views/canopy/ 目录下。文件名会成为模板名称,除非配置中另行指定。
  • 配置:使用 {% canopy config %} 定义标题与设置,配置必须是严格合法的 JSON(双引号、无尾随逗号、无注释)。
  • 设置类型:支持 heading、textarea 等类型,可为每个设置提供合理默认值,使区块在编辑器添加时即呈现完整外观。
  • 渲染:在布局中通过区块区域渲染,需配合 canopy.head、canopy.blocks、canopy.scripts 使用相同句柄。
  • 嵌套区块:支持父区块包含子区块(画廊、滑块、手风琴等)。
  • 区域控制:allow、limit、locked 仅用于 canopy.blocks() 区域声明,用于限定可接受的模板、限制区块数量、固定结构。

使用方式

最小区块示例:

{% canopy config %} { "title": "Hero", "settings": [ { "name": "heading", "type": "heading", "default": { "value": "Welcome", "element": "h1" } }, { "name": "description", "type": "textarea" } ] } {% endcanopy %}

{% canopy template %} <section> <{{ settings.heading.element }}>{{ settings.heading.value }}</{{ settings.heading.element }}> <p>{{ settings.description }}</p> </section> {% endcanopy %}

在布局中通过区块区域渲染:

<head>{{ canopy.head('main') }}</head> <body> {{ canopy.blocks('main') }} {{ canopy.scripts('main') }} </body>

按任务加载对应规则文件:

  • 创建/编辑区块模板、配置或区块;隐藏区块:rules/block-templates.md
  • 定义设置(类型、默认值、标签页/分组):rules/settings.md
  • 在布局中渲染区块(区域、head/scripts、shared、allow/limit/locked):rules/rendering.md
  • 含子区块的父区块(画廊、滑块、手风琴):rules/nested-blocks.md
  • 设计区块、构建工作流、常见模式:rules/patterns.md
  • 维护或迁移已废弃的 cms_* 元素:rules/legacy-elements.md

该技能是 Canopy Blocks 的权威来源。规则索引覆盖的内容不要调用 Blutui 文档 MCP 或抓取 docs.blutui.com,而应加载匹配的规则文件;规则文件完整且最新,包含公开文档可能滞后的功能。仅当主题确实超出本技能范围(Collections 及其字段定义、通用 Canvas 语言语法、仪表盘表单构建)或规则文件明确指向文档时才查阅文档。

核心规则(始终适用)

  • 每个 .canvas 文件在 views/canopy/ 中定义一个区块模板,绝不在其他地方定义区块。
  • 配置必须是严格合法的 JSON。缺少 name、缺少 type 或未知类型的设置会被静默忽略,因此拼写错误不会报错。
  • 为每个设置提供合理默认值。
  • 在渲染依赖标记前,用 {% if %} / {% for %} 保护对象和数组设置值(url、file、list、media-sources)。
  • 始终保护 collection 和 entry 设置值——被删除的内容会解析为 null(单条目、集合)或 [](多条目选择),未保护的模板会出错。
  • 用 raw 过滤器输出 richtext 值——它们以 HTML 存储。
  • 每个区块区域都要与 canopy.head 和 canopy.scripts 使用相同句柄配对,否则区块的 CSS 和 JS 永远不会加载。
  • allow、limit、locked 只能放在 canopy.blocks() 区域声明上,绝不能放在区块模板配置或设置上。allow 列出区域接受的模板(也是显示 "hidden": true 模板的唯一方式),limit 限制区块数量,locked 固定结构(字段仍可编辑;添加/删除/重排不可)。区块配置中唯一的选取器控件是 hidden。
  • 嵌套区块:每个父模板需要恰好一个普通的 {{ canopy.children() }} 调用(带过滤/索引/childList 的渲染仅用于显示——没有普通调用,编辑者无法添加或管理子区块),每个子模板的配置需要显式 "name",以便在过滤器和默认列表期望的键下注册。
  • 选择正确的工具:区块用于编辑者组合的区块;{ shared: true } 区域用于全局区块(页脚);Collections 用于结构化、可查询的数据(博客文章、产品)——通过 collection 和 entry 设置类型在区块中呈现;表单通过 form 设置类型加 {% form %} 标签。
  • 新工作中绝不使用已废弃的 cms_* 元素函数——改为构建区块模板。

适用场景

适用于使用 Blutui Canopy 构建页面区块模板、定义设置、在布局中渲染区块、处理父子嵌套区块,以及维护或迁移已废弃 cms_* 元素的开发工作。

限制

资料未提供关于收费、价格、平台支持范围或具体效果的信息。