Dialog Show/Hide Widgets and Conditional Multifields
AEMHow Granite UI's dropdown-driven show/hide widget works inside a dialog and inside a multifield, why "hidden" fields aren't the same as "deleted" fields, and how dead hidden fields quietly pile up in real dialogs after a redesign.
12 min read•2026-08-28
Extending a Core Component's Dialog and Hiding Inherited Fields
AEMHow sling:resourceSuperType merges your component's dialog with a Core Component's own dialog, how sling:hideResource suppresses a specific inherited field, and why hiding a Core Component's built-in structure editor without replacing what it does can quietly break the component's own client-side behavior.
11 min read•2026-08-28
Inherited Page Properties and Site-Wide Feature Toggles
AEMHow Sling's HierarchyNodeInheritanceValueMap lets a page property cascade down from a site root unless a descendant page overrides it, why "not set" and "set to false" produce the same visible result, and why that makes changing a toggle's default a much bigger change than it looks.
12 min read•2026-08-28
Policy-Driven Field Visibility and Node-Level Dialog Subtree Reuse
AEMTwo dialog-authoring techniques beyond dropdown show/hide: tying a field's visibility to a component's design/policy properties with Granite Expression Language, and reusing a specific tab or field from an unrelated component's dialog via a node-level sling:resourceSuperType or a foundation/include — with full, working examples of each.
14 min read•2026-08-28
Sitemap Generation Edge Cases: Multi-Value Properties, Vanity URLs, and Template-Aware Alternates
AEMThree real edge cases that break a custom Sling sitemap generator in ways code review rarely catches — an untyped multi-value property read that silently defeats a noindex check, alternate-language links that point at vanity paths instead of real content paths, and hreflang links added between pages that don't actually share a template family.
11 min read•2026-08-28
Experience Fragment Property Propagation: When a ResourceChangeListener Copies Instead of Inherits
AEMA ResourceChangeListener that stamps theme and config properties onto a newly created Experience Fragment by copying them from the nearest matching site page — a write-once-at-creation pattern that looks like inheritance but is actually a snapshot, and silently diverges from its source the moment that source page changes.
11 min read•2026-08-28