【问题标题】:Given a Path get a reference to the Resource in Sightly给定一个路径,在 Sightly 中获取对资源的引用
【发布时间】:2016-04-25 12:16:23
【问题描述】:

组件对话框有一个路径字段小部件,作者可以在其中设置页面路径。在 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); 

【问题讨论】:

    标签: aem sling sightly


    【解决方案1】:

    我觉得应该有一个更好的答案,它允许直接从 Sightly 解决资源,但如果没有,以下 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);
       }    
    }
    

    组件 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>
    

    【讨论】:

      【解决方案2】:

      本质上,您尝试做的是在渲染另一个资源的上下文中渲染一个资源。 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 包含要生成的渲染,该渲染将在您的路径标识的资源的上下文中调用。

      【讨论】:

      • 哦好主意!而不是子类型,我可能只会在同一个组件文件夹中添加一个选择器和匹配的 html 文件..... data-sly-resource="${'path/to/resource' @ selectors=['teaser-信息']}"
      • 嗨。 subtype.html 中应该包含哪些内容才能获得所需的输出?
      【解决方案3】:

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

      【讨论】:

      • 似乎很奇怪,您需要为链接内容的标准用例编写自定义 Java 代码。
      • 另外,您的链接实际上并没有关于编写 Java 来处理这种情况。
      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 2011-09-12
      • 2021-04-24
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      相关资源
      最近更新 更多