CQ5.5:获取目标页面的样式

时间:2013-07-22 14:58:57

标签: cq5

我一直在研究这个问题,现在我一直在努力。我认为我很接近,但我认为在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”。查看此处的文档:http://dev.day.com/docs/en/cq/5-5/javadoc/com/day/cq/wcm/api/designer/Style.html

我已经能够提出这样一个事实:我可以从通过defineObjects提供的“designer”对象中获取一个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为null。为了做更多测试,我尝试传递currentPage.getPath()而不是homePage.getPath()。我假设这将给我currentPage资源,并最终将产生currentStyle对象。这也导致了一个null Style对象。由此我想我可以安全地断定我传递的资源类型不正确。

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

我很好奇是否有人之前遇到过这个问题。如果我进入太多细节,我会道歉,但我想在我的问题中列出“为什么”,以防万一有更好的方法来完成这个。

2 个答案:

答案 0 :(得分: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的设计/样式。

我希望这可以帮助其他人。

答案 1 :(得分:0)

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

设计homePageDesign = designer.getDesign(homePage);

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

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

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

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

  2. 获取目标网页的sling:resourceType并获取“/".

  3. 的最后一个索引后的值
  4. 检查此JSON是否包含最后一个值。如果它包含,你可以获得你的风格,即图像等。