给定路径获取对 Sightly 中资源的引用
Given a Path get a reference to the Resource in Sightly
组件对话框有一个路径字段小部件,作者可以在其中设置页面路径。在 Sightly 组件中,我想查找该页面资源并从中获取(和显示)属性。
对话框...
<linkedPathLocation jcr:primaryType="cq:Widget"
fieldLabel="Linked Path"
name="./linkedPathLocation"
xtype="pathfield"
fieldDescription="Select a page. URL, Title, Description and Image are properties of the selected page"/>
我想使用的组件代码(不是)。
<div class="row" data-sly-resource.page = "${properties.linkedPathLocation}">
<h1 >${page.title}</h1>
<p>${page.description}</p>
</div>
我的问题:Sightly 中是否有一种方法可以解析和使用给定路径中的某些资源?如果没有,我可以创建一个 USE-API class 并执行以下操作...
Page page = resourceResolver.resolve("/path/to/resource").adaptTo(Page.class);
我觉得应该有一个更好的答案,它允许直接从 Sightly 解析资源,但是下面的 USE-API 解决方案如果不行...
Java 使用 Class
public class PageHelper extends WCMUsePojo {
String pagePath = "";
@Override
public void activate() {
pagePath = get("path", String.class);
}
public Page getPage() {
return this.getPageManager().getPage(pagePath);
}
}
Sightly 组件...
<div class="row" data-sly-use.linkedPage = "${'com.package.PageHelper' @ path = properties.linkedPathLocation}">
<h1 >${linkedPage.page.title}</h1>
<p>${linkedPage.page.description}</p>
</div>
Sightly 模板的主要目的是分离责任(前端和后端),这样我们就可以拥有简单、干净、美观的 html 标记,对设计人员友好且易于阅读。
对于您的情况,编写 Class (Java/Javascript) 来处理对话信息,并将其提供回 Sightly 模板是正确的方法。阅读 here 了解更多详情。
本质上,您要做的是在呈现另一个资源的上下文中呈现一个资源。 data-sly-resource
似乎是合适的属性,但与其尝试将其他元素嵌套到包含 data-sly-resource
的元素中,不如定义另一个 Sightly .html 文件,该文件指示嵌套资源如何被渲染。
假设您的资源类型为 application/components/content/type
。在 type.html 中,您可能有以下语句
<sly data-sly-resource="${properties.linkedPathLocation} @ resourceType='application/components/content/type/subtype' />
然后您将能够定义 /apps/application/components/content/type/subtype/subtype.html
包含要生成的渲染,这将在您的路径标识的资源的上下文中调用。
组件对话框有一个路径字段小部件,作者可以在其中设置页面路径。在 Sightly 组件中,我想查找该页面资源并从中获取(和显示)属性。
对话框...
<linkedPathLocation jcr:primaryType="cq:Widget"
fieldLabel="Linked Path"
name="./linkedPathLocation"
xtype="pathfield"
fieldDescription="Select a page. URL, Title, Description and Image are properties of the selected page"/>
我想使用的组件代码(不是)。
<div class="row" data-sly-resource.page = "${properties.linkedPathLocation}">
<h1 >${page.title}</h1>
<p>${page.description}</p>
</div>
我的问题:Sightly 中是否有一种方法可以解析和使用给定路径中的某些资源?如果没有,我可以创建一个 USE-API class 并执行以下操作...
Page page = resourceResolver.resolve("/path/to/resource").adaptTo(Page.class);
我觉得应该有一个更好的答案,它允许直接从 Sightly 解析资源,但是下面的 USE-API 解决方案如果不行...
Java 使用 Class
public class PageHelper extends WCMUsePojo {
String pagePath = "";
@Override
public void activate() {
pagePath = get("path", String.class);
}
public Page getPage() {
return this.getPageManager().getPage(pagePath);
}
}
Sightly 组件...
<div class="row" data-sly-use.linkedPage = "${'com.package.PageHelper' @ path = properties.linkedPathLocation}">
<h1 >${linkedPage.page.title}</h1>
<p>${linkedPage.page.description}</p>
</div>
Sightly 模板的主要目的是分离责任(前端和后端),这样我们就可以拥有简单、干净、美观的 html 标记,对设计人员友好且易于阅读。 对于您的情况,编写 Class (Java/Javascript) 来处理对话信息,并将其提供回 Sightly 模板是正确的方法。阅读 here 了解更多详情。
本质上,您要做的是在呈现另一个资源的上下文中呈现一个资源。 data-sly-resource
似乎是合适的属性,但与其尝试将其他元素嵌套到包含 data-sly-resource
的元素中,不如定义另一个 Sightly .html 文件,该文件指示嵌套资源如何被渲染。
假设您的资源类型为 application/components/content/type
。在 type.html 中,您可能有以下语句
<sly data-sly-resource="${properties.linkedPathLocation} @ resourceType='application/components/content/type/subtype' />
然后您将能够定义 /apps/application/components/content/type/subtype/subtype.html
包含要生成的渲染,这将在您的路径标识的资源的上下文中调用。