给定Path获取Sightly中的Resource的引用

时间:2016-01-19 20:51:11

标签: aem sling 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类并执行以下操作......

Page page = resourceResolver.resolve("/path/to/resource").adaptTo(Page.class); 

3 个答案:

答案 0 :(得分:2)

我觉得应该有一个更好的答案,它允许直接从Sightly解析资源,但是如果不是,以下的USE-API解决方案也能正常工作......

Java Use 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>

答案 1 :(得分:1)

实际上,您要做的是在呈现另一个资源的上下文中呈现资源。 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,以生成将在您的路径标识的资源的上下文中调用的渲染。

答案 2 :(得分:-2)

Sightly模板的主要目的是分离责任(前端和后端),以便我们可以拥有简单,干净和漂亮的html标记,这种标记设计友好且易于阅读。 对于您的情况,编写一个类(Java / Javascript)来处理对话框信息,并将其提供回Sightly模板是正确的方法。请阅读here了解详情。