Hi @georhe6,
Core Carousel items class is com.adobe.cq.wcm.core.components.internal.models.v1.PanelContainerItemImpl and it has getResource getter. So, you can build solution around it. The solution consist of 2 parts: HTL and Sling Model Helper.
HTL changes example:
<div data-sly-repeat.item="${carousel.items}">
<sly data-sly-test.isImage="${'core/wcm/components/image/v3/image' == item.resource.resourceType}"></sly>
<sly data-sly-test="${!isImage}"
data-sly-resource="${item.name}"></sly>
<sly data-sly-test="${isImage}"
data-sly-use.imageAdapterHelper="${'com.models.ImageAdapterHelper' @ imagePath = item.resource.path}"
data-sly-set.alt="${imageAdapterHelper.image && imageAdapterHelper.image.alt}"
data-sly-set.title="${imageAdapterHelper.image && imageAdapterHelper.image.title}">
<p>${alt}: ${title}</p>
</sly>
</div>Sling Model Helper:
import com.adobe.cq.wcm.core.components.models.Image;
@Model(adaptables = SlingHttpServletRequest.class)
public class ImageAdapterHelper {
@RequestAttribute
private String imagePath;
@Self
private SlingHttpServletRequest request;
@OSGiService
private ModelFactory modelFactory;
@Getter
private Image image;
@PostConstruct
void init() {
if (StringUtils.isEmpty(imagePath)) {
return;
}
image = Optional.ofNullable(request.getResourceResolver().getResource(imagePath))
.map(imageResource -> modelFactory.getModelFromWrappedRequest(request, imageResource, Image.class))
.orElse(null);
}
}
Additionally, you can implement isImage condition directly in the model.
Kostiantyn Diachenko, Community Advisor, Certified Senior AEM Developer, creator of free AEM VLT Tool, maintainer of AEM Tools plugin.