A new component called Page Headline needs to be implemented. The only difference to the title component delivered by Adobe's WCM core components is that the text needs to be taken from the current page title instead of jcr.title.
How should a developer implement this request?
A)
1. Create custom component
2. Implement Sling Modal as follows
B)
1. Create proxy component from the core title component
2. Implement sling Model as follows
C)
1. Create proxy component from the core title component
2. Implement Sling Model as follows
To implement a new component called 'Page Headline' which takes the text from the current page title instead of jcr:title, you should create a proxy component from the core title component and implement a Sling Model accordingly. Option C demonstrates the correct approach to achieve this functionality.
Here is a detailed explanation of Option C:
Create Proxy Component:
Create a new component in your project that will act as a proxy to the core title component. This involves creating a new component node in the repository that inherits from the core title component.
Example path: /apps/myproject/components/pageHeadline with sling:resourceSuperType set to core/wcm/components/title/v2/title.
Implement Sling Model:
Implement a Sling Model that adapts from SlingHttpServletRequest and Title.class, ensuring it overrides the text fetching logic to retrieve the title from the current page's title.
The model will use @ScriptVariable to inject the current page and @Self to access the core title component's logic.
@Model(adaptables = SlingHttpServletRequest.class, adapters = Title.class, resourceType = 'myproject/components/pageHeadline')
public class PageHeadline implements Title {
@ScriptVariable
private Page currentPage;
@Self @Via(type = ResourceSuperType.class)
private Title title;
@Override
public String getText() {
return currentPage.getTitle();
}
@Override
public String getType() {
return title.getType();
}
}
@Model Annotation: Specifies that this class is a Sling Model and adapts from SlingHttpServletRequest. It is also an adapter for Title.class and applies to the myproject/components/pageHeadline resource type.
@ScriptVariable: Injects the current Page object, which allows access to the current page's properties.
@Self @Via(type = ResourceSuperType.class): Injects the core title component, allowing the reuse of existing logic.
getText() Method: Overrides the getText() method to return the title from the current page instead of the jcr:title.
getType() Method: Delegates to the core title component's getType() method to maintain existing functionality.
This approach leverages the power of Sling Models and the core components to extend functionality while keeping the implementation clean and maintainable.
Nichelle
8 days agoLouann
9 days agoTracey
21 days ago