mcpField
E
enonic-content-type-generator

enonic-content-type-generator

github.com/webmaxru开发0464 次安装21 周前更新
代码仓库

关于 enonic-content-type-generator

这项 Skill 根据项目需求生成 Enonic XP 内容类型 XML。它会识别项目、将字段映射到 Enonic XP 输入类型,并验证生成的结构。

主要功能

  1. 01检测 Enonic XP 项目根目录
  2. 02将字段映射到输入类型
  3. 03生成内容类型 XML
  4. 04创建 mixin 和 x-data 文件
  5. 05验证 XML 与结构值

适用场景

  1. 01为 Enonic XP 项目添加内容类型
  2. 02定义字段、选项集或项目集
  3. 03生成 mixin 或 x-data 文件
  4. 04检查生成的 XML 结构问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/webmaxru/enonic-agent-skills --skill enonic-content-type-generator

安装后在 Claude Code 中输入/enonic-content-type-generator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
content-type.template.xml
references/
content-type-reference.md
examples.md
troubleshooting.md
scripts/
find-enonic-targets.mjs

详细介绍

Enonic XP 内容类型生成器

操作步骤

步骤 1:检测 Enonic XP 项目

  1. 执行 node scripts/find-enonic-targets.mjs [workspaceRoot],查找 Enonic XP 项目根目录。
  2. 如果脚本返回空数组,提示未找到 Enonic XP 项目标记,并询问目标目录。
  3. 保存检测到的项目根目录,供后续步骤使用。

步骤 2:收集需求

  1. 从请求中确定内容类型名称。名称必须采用小写字母和连字符格式(例如,blog-post)。
  2. 确定显示名称,即便于阅读的标签(例如,Blog Post)。
  3. 确定超类型。除非请求指定文件夹(base:folder)或其他内置类型,否则默认为 base:structured。
  4. 列出所有请求的字段及其输入类型。阅读 references/content-type-reference.md,将自然语言字段描述映射为正确的 Enonic XP 输入类型和配置。
  5. 确定是否有项目集(可重复的分组字段)、选项集(单选或多选)或 mixin 引用。
  6. 如果请求提及 mixin,确定是生成 mixin 文件,还是引用现有文件。
  7. 如果请求提及 x-data,确定是生成 x-data 文件,还是引用现有文件。

步骤 3:生成内容类型 XML

  1. 阅读 assets/content-type.template.xml,获取起始模板。
  2. 将 DISPLAY_NAME 替换为步骤 2 中的显示名称。
  3. 将 DESCRIPTION 替换为简短描述;如果未提供描述,则移除该元素。
  4. 将 <super-type> 元素设置为步骤 2 中确定的值。
  5. 在 <form> 元素中填入已确定的输入项、项目集、选项集、字段集和 mixin 引用。
  6. 对于每个输入项:
    • 使用 camelCase 设置 name 属性。
    • 将 type 属性设置为准确的 Enonic XP 输入类型名称(区分大小写)。
    • 根据需要添加 <label>、<occurrences>、<help-text>、<default> 和 <config>。
  7. 对于 ComboBox 和 RadioButton 输入项,在 <config> 中包含所有选项。
  8. 对于 ContentSelector、ImageSelector 和 MediaSelector 输入项,根据指定内容,在 <config> 中包含 allowContentType、allowPath、treeMode 和 hideToggleIcon。
  9. 对于 TextLine 和 TextArea,如果请求了验证约束,则添加包含 max-length、show-counter 或 regexp 的 <config>。
  10. 对于 Long 和 Double,如果请求了范围约束,则添加包含 min 和 max 的 <config>。
  11. 对于 DateTime,如果请求存储时包含时区信息,则添加 <config> 和 <timezone>true</timezone>。
  12. 如果需要参考示例,请阅读 references/examples.md。

步骤 4:写入文件

  1. 构造目标路径:[projectRoot]/src/main/resources/site/content-types/[name]/[name].xml
  2. 如果目录不存在,则创建该目录。
  3. 将生成的 XML 写入文件。
  4. 如果生成了 mixin,则将其写入:[projectRoot]/src/main/resources/site/mixins/[name]/[name].xml
  5. 如果生成了 x-data,则将其写入:[projectRoot]/src/main/resources/site/x-data/[name]/[name].xml
  6. 如果 site.xml 中需要引用 x-data,则根据指定内容添加带有 allowContentTypes 和 optional 属性的 <x-data> 条目。

步骤 5:验证输出

  1. 验证生成的 XML 格式正确。
  2. 通过参照 references/content-type-reference.md,确认每个 <input> 都具有有效的 type 属性。
  3. 确认同一嵌套层级中的所有 name 属性均唯一。
  4. 确认 <occurrences> 的值逻辑一致(最小值 <= 最大值,或最大值 = 0 表示无限制)。
  5. 如果请求询问超类型、输入类型或架构结构,但未要求生成文件,则使用 references/content-type-reference.md 回答问题,不创建文件。

错误处理

  • 如果 scripts/find-enonic-targets.mjs 以非零代码退出,请报告 stderr 消息,并要求用户手动提供项目根目录路径。
  • 如果请求的输入类型与任何已知的 Enonic XP 输入类型都不匹配,请阅读 references/content-type-reference.md 并建议最接近的匹配项。不要自行编造输入类型名称。
  • 如果 XML 验证失败,请阅读 references/troubleshooting.md 以诊断并修正错误,然后重新生成文件。
  • 如果无法解析 mixin 引用,请在编写内容类型之前确认 mixin 文件路径存在。

评论

支持 Markdown