SuperAPI AI 工具集

acquia-source-navigation-menus

前端与建站

查看项目

更新于 10-15 11:22

技能介绍

用途

本技能面向 Acquia Source 站点,用于通过 Source MCP 在 Drupal CMS 中创建和编辑导航菜单。其核心原则是:菜单属于 CMS(Drupal 菜单实体和菜单链接),这是生产环境中正确且可维护的模型。该技能自动化的是你在 Acquia Source 站点“结构 → 菜单”下会创建的同一份数据,而不是用组件中硬编码的链接列表来替代 CMS。

适用条件

仅在以下条件全部满足时使用:

  • 目标是 Acquia Source Drupal 站点(参见 AGENTS.md,例如该环境的 .cms.acquia.site 或 CANVAS_SITE_URL)。
  • 你正在为该远程站点编写或更改菜单或菜单链接。
  • 你将使用 Source MCP(需阅读每个工具的 schema;服务器 id 通常是 user-source-mcp)。

不适用场景

  • 非 Acquia Source / Source MCP 目标(其他托管、仅本地 Workbench,或未针对该环境使用 Source MCP 服务器的 Canvas 站点)。这些情况应使用 Drupal 管理后台或项目常规操作创建菜单,不要通过本文档处理。
  • 在应由编辑器驱动的站点上,把代码中的静态 FALLBACK_LINKS 当作真实 Drupal 菜单的替代品。回退链接仅用于空状态或预览;在 Source 上仍应在 CMS(MCP 或 UI)中创建菜单。
  • 如果 Source 站点上 Source MCP 不可用,仍应在 Drupal 管理后台(结构 → 菜单)创建相同菜单——那才是正确位置;缺失的只是自动化路径,而不是模型。参见 canvas-navigation-components。

与 Canvas 组件的关系

CMS 优先:作者和本技能操作 Drupal;组件只按机器名读取 menu_items。保持 component.yml 中的 menuName 与你在 CMS 中创建的菜单同步(参见 canvas-data-fetching 和 canvas-navigation-components)。本技能不推送 React 代码,只操作服务器上的菜单实体。当组件源码仍需上传时,使用 canvas-component-push。

发现现有菜单

创建重复项之前,先列出菜单:

  • MCP 资源:drupal://menus(JSON 列表;条目可能包含指向各菜单项树的链接——参见你的服务器资源模板)。
  • 使用与工具相同的服务器 id(<source-mcp-id>)。

MCP 工具

调用工具前,务必在 MCP 文件系统中阅读 Source 服务器每个工具的 JSON schema。典型的菜单相关工具:

  • create_menu:新建自定义菜单,参数包括机器 id、标签、可选描述。
  • update_menu:更改现有菜单 id 的标签或描述。
  • create_menu_item:添加链接,参数包括 menu_name、title、link、可选 parent、weight、enabled、expanded、description。
  • update_menu_item:按菜单链接内容 id(整数)修补,参数包括 title、link、parent、weight、enabled、expanded、description。
  • delete_menu_item:按 id 删除;可选 delete_children。

链接 URI(link 字段)

使用工具 schema 中记录的格式(常见如下):

  • 内部路径:internal:/path(例如 internal:/about、internal:/node/1)
  • 外部链接:https://example.com
  • 实体快捷方式:entity:node/1
  • 路由:route:<Drupal route name>

确保路径与站点上真实的别名或节点匹配,以便发布后链接可解析。

层级(嵌套项)

  • 先创建父项,再创建子项。
  • parent 通常是菜单链接插件 id 字符串(例如 menu_link_content:<uuid>)——按 MCP 工具输出,从 create_menu_item 响应或父项的菜单树资源中获取该值。
  • weight:值越小通常越靠前;用于同一层级内的排序。

排序与清理

  • 使用 update_menu_item 配合 weight(以及 link / title)来重新排序或修正错误,而无需删除。
  • 使用 delete_menu_item 删除条目;如果该项有后代,确认 delete_children 行为。

建议工作流

  1. 获取 drupal://menus → 记录现有的 main、footer 等菜单。
  2. 如果需要新菜单(新机器名),调用 create_menu → 然后用该 id 作为 menu_name 添加菜单项。
  3. 否则针对 main / footer 等调用 create_menu_item,使用与已部署 Canvas 页面或节点匹配的链接 URI(路由方面与 acquia-source-canvas-pages 协调)。
  4. 在 Drupal UI 中或通过 JSON:API 的 menu_items 验证组件 menuName 对应的菜单,如 canvas-data-fetching 所述。

相关技能

  • AGENTS.md:Acquia Source 信号、CANVAS_SITE_URL、Canvas 页面与 CLI。
  • canvas-navigation-components:menuName、分解、UX/可访问性。
  • canvas-data-fetching:menu_items、sortMenu、SWR、回退。
  • acquia-source-canvas-pages:菜单应指向的路径和 canvas_page URL。
  • acquia-source-site-build:完整流水线 Phase B5(菜单)。
  • canvas-component-push:推送导航组件(与菜单实体分开)。