仅在资源存在的情况下,如何在Sightly模板中包括资源?

Rob*_*anu 5 sling sightly

我想使用它data-sly-resource来包含资源,但是仅当它存在时,例如

<div class="pull-right" data-sly-resource="/content/blog/stats"></div>
Run Code Online (Sandbox Code Playgroud)

如果资源不存在,脚本执行将失败,并显示以下错误消息:找不到用于处理资源/内容/博客/状态的servlet。从“请求进度”列表中,我可以看到它是SyntheticResource

TIMER_START {resolveServlet(SyntheticResource,type = null,path = / content / blog / stats)}

仅在资源存在的情况下,如何才能有条件地包括该资源?

小智 4

在这种情况下,最好的解决方案是允许您的组件正确处理应该渲染的redis/stats情况,或者更一般地说,不提供任何属性。ResourceSyntheticResource

因此,调用 Sightly 代码片段应该是:

<div class="pull-right" data-sly-resource="${'/content/blog/stats' @ resourceType='redis/stats'}"></div>
Run Code Online (Sandbox Code Playgroud)

这会强制由您的组件进行渲染redis/stats,即使/content/blog/stats资源不存在(好吧,Sling 将返回 a SyntheticResource,就像您提到的那样)。

redis/stats然后,您可以在您的组件中尝试此保护措施:

<div class="blog-stats" data-sly-test="${properties}">
<!--/* This whole block will only be rendered if properties is not empty */-->
</div>
Run Code Online (Sandbox Code Playgroud)

div.blog-stats仅当属性映射不为空时才会渲染[0]。

[0] - https://github.com/Adobe-Marketing-Cloud/sightly-spec/blob/1.1/SPECIFICATION.md#225-test