Aem 给定一条路径,获取对中资源的引用

Aem 给定一条路径,获取对中资源的引用,aem,sling,sightly,Aem,Sling,Sightly,“组件”对话框有一个pathfield小部件,作者可以在其中设置页面路径。在Sightly组件中,我想查找该页面资源并从中获取(和显示)属性 对话 <linkedPathLocation jcr:primaryType="cq:Widget" fieldLabel="Linked Path" name="./linkedPathLocation" xtype="pathfield"

“组件”对话框有一个pathfield小部件,作者可以在其中设置页面路径。在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"/>   

我觉得应该有一个更好的答案,它允许直接从源代码解析资源,但是下面的USE-API解决方案如果不起作用的话就可以工作了

Java使用类

public class PageHelper extends WCMUsePojo {
  String pagePath = ""; 
  @Override
  public void activate() {
    pagePath = get("path", String.class);
  }

  public Page getPage() {
    return this.getPageManager().getPage(pagePath);
   }    
}
组件很明显

<div class="row" data-sly-use.linkedPage = "${'com.package.PageHelper' @ path = properties.linkedPathLocation}">
    <h1 >${linkedPage.page.title}</h1>
    <p>${linkedPage.page.description}</p>
  </div>

${linkedPage.page.title}
${linkedPage.page.description}


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

实际上,您试图做的是在呈现另一个资源的上下文中呈现一个资源
data-sly-resource
似乎是要使用的适当属性,但与其尝试将其他元素嵌套到包含
data-sly-resource
的元素中,不如定义另一个Sightly.html文件,该文件指示如何呈现嵌套的资源

假设您的资源类型为
应用程序/组件/内容/类型
。在type.html中,您可能有以下语句

<sly data-sly-resource="${properties.linkedPathLocation} @ resourceType='application/components/content/type/subtype' />

哦,好主意!我可能只是添加一个选择器,并在同一个组件文件夹中添加匹配的html文件,而不是子类型。。。。。data sly resource=“${path/to/resource'@selectors=['striser-info']}”您好。要获得所需的输出,subtype.html中应该包含哪些内容?奇怪的是,您需要为链接内容的标准用例编写自定义Java代码。此外,您的链接实际上与编写Java来处理这种情况无关。
<div class="row" data-sly-use.linkedPage = "${'com.package.PageHelper' @ path = properties.linkedPathLocation}">
    <h1 >${linkedPage.page.title}</h1>
    <p>${linkedPage.page.description}</p>
  </div>
<sly data-sly-resource="${properties.linkedPathLocation} @ resourceType='application/components/content/type/subtype' />