Search
Search articles
Find articles by title, tag, or anything in the text. Every word you type has to match.
Extending a Core Component's Dialog and Hiding Inherited Fields
How 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.
Inherited Page Properties and Site-Wide Feature Toggles
How 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.
Policy-Driven Field Visibility and Node-Level Dialog Subtree Reuse
Two 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.
Sitemap Generation Edge Cases: Multi-Value Properties, Vanity URLs, and Template-Aware Alternates
Three 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.
Experience Fragment Property Propagation: When a ResourceChangeListener Copies Instead of Inherits
A 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.
Real-World Scenarios: Dead Hidden Fields After a Multifield Migration
A field an author fills in that visibly does nothing — tracing a dialog's hidden, dead flat fields back to a multifield migration that never cleaned up after itself, and a template-contract test that would have caught it.
Real-World Scenarios: The Carousel With No Slides to Navigate
A hero carousel that renders navigation arrows and indicators but no slides — tracing it back to an inherited Core Component dialog tab that got hidden without anything replacing what it authored, and the contract test that would have caught it pre-launch.
Real-World Scenarios: Flipping a Feature Toggle's Default Changed More Pages Than Expected
A one-line change to an inherited page property's default value quietly changed behavior on hundreds of pages that had never explicitly set it — how it was traced, and the audit query that should have run before the change shipped.
Real-World Scenarios: A Shared Icon Picker's New Required Field Blocked Saves on Three Unrelated Components
A compliance-driven field added to one shared dialog subtree quietly became a required field on three components that reused it via node-level sling:resourceSuperType — tracing the save-blocking bug back to an invisible dialog dependency, and the CI check that finds every consumer before a change ships.
Real-World Scenarios: An SEO Audit Found Every noindex Page Still Listed in the Sitemap
A quarterly SEO audit found that a noindex exclusion feature in a custom sitemap generator had never worked in production — traced to an untyped multi-value property read and a Java array's default toString(), plus two related fixes for vanity-path alternates and template-mismatched hreflang links.