一键导入
axon-ivy-cms
Create and manage CMS (Content Management System) content — multi-language YAML files, binary content (files), and Portal CMS overrides.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Create and manage CMS (Content Management System) content — multi-language YAML files, binary content (files), and Portal CMS overrides.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Rules and best practices for Axon Ivy HTML Dialog implementations including PrimeFaces, PrimeFlex, CSS, JS, and Ivy components.
Rules and patterns for the `com.axonivy.utils.persistence` library — the Axon Ivy community helper around JPA. Covers `AuditableIdEntity`, `AuditableIdDAO`, `CriteriaQueryContext`, and `UpdateQueryContext`. Use whenever Java code in `src/` reads or writes data through a DAO that extends `AuditableIdDAO` or an entity that extends `AuditableIdEntity`.
Rules and patterns for creating, editing, reviewing, and fixing Axon Ivy workflow processes (.p.json files). Use this when working with any .p.json file — including checking existing processes for errors, reviewing script code, or fixing IvyScript issues.
Verification checklist for Axon Ivy process files (.p.json). Use this whenever a .p.json file is created, modified, or reviewed — either after axon-ivy-process skill, or when a user asks to check, verify, or fix a process file for errors.
Master router skill for all requirement clarification, create story, development, review, and testing tasks. Detects user intent and orchestrates the correct path using specialized skills and parallel subagents.
Rules and patterns for sending email from an Axon Ivy project. Covers sender / recipient resolution, subject and body templating, attachments, and the recommended builder pattern for one mail type per class. Use whenever Java code or a process step composes or sends an email.
| name | axon-ivy-cms |
| description | Create and manage CMS (Content Management System) content — multi-language YAML files, binary content (files), and Portal CMS overrides. |
This skill includes reference files in the cms/ subfolder:
| File | Purpose | When to Read |
|---|---|---|
cms/cms_en.yaml | English CMS example with all namespace patterns | Always — primary reference for structure |
cms/cms_de.yaml | German translation showing multi-language pattern | When creating multi-language entries |
Read these to understand the YAML key hierarchy, namespace conventions, and value formatting.
Axon Ivy CMS has a hierarchical structure with three types of content objects:
| Type | Storage | Description |
|---|---|---|
| Folder | Filesystem directory | Hierarchy only — no content values |
| Text | cms_*.yaml files | Multilingual text strings stored as YAML key-value pairs |
| File | Binary files in cms/ folder | Images, CSS, PDFs — the file path IS the CMS path |
Stored in cms_<locale>.yaml files. Each language has its own file with identical key hierarchies.
cms/
├── cms_en.yaml # English texts
├── cms_de.yaml # German texts (same keys, translated values)
└── cms_fr.yaml # French texts (same keys, translated values)
en, de) or language + region (en_US, en_GB)ivy.cms.co("/path/to/key") — returns text for the user's current localeBinary files (images, CSS, documents) stored directly in the cms/ folder tree.
No YAML entries needed — the filesystem path IS the CMS path.
cms/
├── images/
│ └── Logo.png # CMS path: /images/Logo
├── Styles/
│ └── Custom.css # CMS path: /Styles/Custom
└── documents/
├── instruction.pdf # CMS path: /documents/instruction (language-neutral)
├── instruction_en.pdf # CMS path: /documents/instruction (English)
└── instruction_de.pdf # CMS path: /documents/instruction (German)
instruction_en.pdf, instruction_de.pdf)ivy.cm.ref("/images/Logo") — returns a URL link to the fileaxon-ivy-html — XHTML files reference CMS via #{ivy.cms.co('...')}axon-ivy-cms-verify — MUST run after creating/modifying CMS files to catch common errorsWhen creating or modifying an XHTML dialog, ALWAYS create corresponding CMS entries for ALL configured languages.
Before creating any new CMS key, ALWAYS search existing cms_*.yaml files for reusable entries.
cms_*.yaml files in the project's cms/ folder/Labels/ namespace first — common labels are stored there for cross-dialog reuseExample reuse:
<!-- GOOD: Reuse existing shared label -->
<p:commandButton value="#{ivy.cms.co('/Labels/Cancel')}" />
<!-- BAD: Creating a duplicate dialog-specific key for a common word -->
<p:commandButton value="#{ivy.cms.co('/Dialogs/hr/onboarding/MyDialog/CancelButton')}" />
Scan the XHTML for hardcoded text that should be externalized:
<h2>, <h3>, panel headers)<h:outputLabel value="...">)<p:commandButton value="...">)placeholder="...")<p>, <span>)For dialog-specific labels, create CMS entries in the same namespace as the dialog (matching its package path):
Dialog: hr.onboarding.InputUploadForm
→ CMS key: /Dialogs/hr/onboarding/InputUploadForm/<LabelName>
XHTML usage: #{ivy.cms.co('/Dialogs/hr/onboarding/InputUploadForm/Title')}
YAML path: Dialogs: hr: onboarding: InputUploadForm: Title: "..."
When to use which namespace:
| Namespace | Use for | Example |
|---|---|---|
/Dialogs/<package>/<Dialog>/ | Labels specific to ONE dialog (page title, section headers unique to that dialog) | /Dialogs/hr/onboarding/StartOnboarding/Title |
/Labels/ | Common labels reusable across MULTIPLE dialogs (Cancel, Submit, Yes/No, Status) | /Labels/Cancel |
/Email/ | Email template content | /Email/OnboardingNotification/subject |
Check which cms_*.yaml files exist in the project. If none exist yet, create at minimum cms_en.yaml. For each language file:
cms_en.yaml): Use the original UI text directlyReplace all hardcoded strings with CMS references:
<!-- BEFORE -->
<h2>Start Employee Onboarding</h2>
<p:commandButton value="Submit" />
<!-- AFTER -->
<h2>#{ivy.cms.co('/Dialogs/hr/onboarding/MyDialog/Title')}</h2>
<p:commandButton value="#{ivy.cms.co('/Dialogs/hr/onboarding/MyDialog/SubmitButton')}" />
| Externalize to CMS | Keep hardcoded |
|---|---|
| Page titles, headers | HTML structure, CSS classes |
| Button labels | Component IDs |
| Field labels | Technical attributes (allowTypes, sizeLimit) |
| Descriptive paragraphs | EL expressions (#{data.field}) |
| Error/validation messages | Icon class names (si si-*) |
| Tab titles | Layout classes (col-12, grid) |
| Placeholder text |
| Type | Location | Format |
|---|---|---|
| Text content | <project>/cms/cms_<locale>.yaml | YAML |
| Binary/File content | <project>/cms/<path>/<file.ext> | Any (PNG, CSS, PDF, etc.) |
See cms/cms_en.yaml reference for full examples. Key namespaces:
| Namespace | Purpose | CMS Access Path |
|---|---|---|
ch.ivy.addon.portalkit.ui.jsf: | Override Portal default labels | /ch.ivy.addon.portalkit.ui.jsf/... |
ch.ivy.addon.portal.generic: | Override Portal generic labels | /ch.ivy.addon.portal.generic/... |
Dialogs: | Dialog-specific labels (match package path) | /Dialogs/package/path/DialogName/Key |
Processes: | Process start names/descriptions | /Processes/package/path/ProcessName/name |
Labels: | Shared reusable labels | /Labels/Key |
Email: | Email template content | /Email/TemplateName/subject |
<!-- Text content -->
<p:outputLabel value="#{ivy.cms.co('/Labels/Actions')}" />
<!-- With parameters -->
<h:outputFormat value="#{ivy.cms.co('/Email/greeting')}">
<f:param value="#{data.userName}" />
</h:outputFormat>
<!-- File/binary content (images) — use ivy.cm.ref for URL link -->
<p:graphicImage value="#{ivy.cm.ref('/images/Logo')}" />
// Get CMS text content
String label = Ivy.cms().co("/Labels/Actions");
// With parameters
String greeting = Ivy.cms().co("/Email/greeting", Arrays.asList(userName));
<%=ivy.cms.co('/Email/EmailReminder/newTaskMail/title')%>
: as separators in the YAML hierarchy (representing / in access paths)cms_en.yaml, it must also exist in cms_de.yamlcom.example.MyDialog → key path Dialogs: com: example: MyDialog:'The ''quoted'' text'ivy.cms.co() (returns String)ivy.cm.ref() (returns URL link)Yes/No/True/False/On/Off keysAxon Ivy uses SnakeYAML (YAML 1.1), which treats these words as booleans. Any such word used as a key must be single-quoted.
# WRONG
Labels:
Yes: 'Yes'
No: 'No'
# RIGHT
Labels:
'Yes': 'Yes'
'No': 'No'
To override Axon Ivy Portal default labels, use the ch.ivy.addon.portalkit.ui.jsf: namespace:
ch.ivy.addon.portalkit.ui.jsf:
common:
save: Speichern # Override Portal's "Save" label
cancel: Abbrechen # Override Portal's "Cancel" label
caseDetails:
addNoteHelpText: Write your text here.
IMPORTANT: Only override keys that exist in the Portal's default CMS. Check Portal documentation for available keys.