1

我已经为此工作了一段时间,但我一直在撞墙。我想我已经很接近了,但我想如果不是做我想做的事情的更好方法,那么在 SO 土地上的某个人可能会有更深入的洞察力。

基本上让我们看看这个场景。我有一个带有一些文本的徽标,可以从几个不同的地方设置。如果我们看一下这里的设置,它的样子。

Hiearchy:
Homepage [has designPath]
  - Child Microsite Page [has designPath]
    - Logo Component

Logic Flow (in logo component):
if properties.get("logoText") {
  use this
} else if currentStyle.get("logoTextFromStyle") {
  use this
} else if parentStyle.get("logoTextFromGlobal") {
  use this
} else {
  be blank
}

我的查询是如何获取此页面的“parentStyle”。在这里查看文档: //dev.day.com/docs/en/cq/5-5/javadoc/com/day/cq/wcm/api/designer/Style.html

我已经能够想出这样一个事实,即我可以从通过 defineObjects 提供的“设计器”对象中获取 Style 对象。这是使用其他实用程序对象定义的,例如“pageManager、resourceUtil、resource、currentPage 等”。

话虽如此,这似乎不起作用。

//assuming we have getting homePage earlier and it is a valid cq Page resource
Resource homePageResource.slingRequest.getResourceResolver().getResource(homePage.getPath());
Style homePageStyle = designer.getStyle(homePageResource);

此时 homePageStyle 为空。为了进行更多测试,我尝试通过 currentPage.getPath() 而不是 homePage.getPath()。我认为这会给我 currentPage 资源并最终产生 currentStyle 对象。这也导致了一个空的 Style 对象。由此我认为我可以安全地得出结论,我传递了不正确的资源类型。

我试图将 cq:designPath 加载到资源中,希望获得 Designer resourceType 但无济于事。

我很好奇以前是否有人遇到过这个问题。如果我已经详细说明了太多细节,我深表歉意,但我也想为我的问题列出“为什么”,以防万一有更好的方法来实现这一点。

4

2 回答 2

2

我已经想出了如何返回样式。这是我所做的事情的概要。

//get your page object
Page targetPage = pageManager.getPage("/path/to/target");

//get the Design object of the target page
Design homePageDesign = designer.getDesign(homePage);

//extract the style from the design using the design path
Style homePageStyle = homePageDesign.getStyle(homePageDesign.getPath());

非常有趣的是,“getStyle”的定义与designer.getStyle 和Design.getStyle 有点不同。Designer.getStyle 请求资源,而 Design.getStyle 将采用路径到设计“单元格”并返回适当的样式。

我做了一些测试,看起来它确实适用于继承的样式/设计。因此,如果我的 cq:designPath 设置为级别 1,并且我在级别 2 上查找页面,他们将返回设置在级别 1 的 cq:designPath 的设计/样式。

我希望这对其他人有所帮助。

于 2013-07-22T15:56:44.850 回答
0

我尝试了这种方法,但没有在 Style 对象中获取样式。当我们这样做时:

设计homePageDesign=designer.getDesign(homePage);

在这个设计对象中,我们得到了项目节点的路径,即 etc/design/myproject

在此之后,如果我们尝试从设计路径中提取样式,我们不会得到它。

但是我以不同的方式实现了它。

  1. 在设计对象中,我们还获得了 (etc/design/myproject) 的设计的完整 JSON。

  2. 获取目标页面的 sling:resourceType 并获取“/”的最后一个索引之后的值。

  3. 检查此 JSON 是否包含最后一个值。如果它包含,您可以获得您的样式,即图像等。
于 2014-01-03T06:08:07.547 回答