2013-07-22 2 views
1

나는 언젠가 이것을 위해 일해 왔고, 나는 계속 벽에 뛰어 들었다. 내 생각 엔 내가 가까이있는 것 같아.하지만 내가하는 일을하는 더 좋은 방법이 아니라면, 이제 그 땅에있는 누군가가 더 깊은 통찰력을 가질 수있을 거라 생각했다.CQ5.5 : 대상 페이지의 스타일을 가져 오는 것

기본적으로이 시나리오를 살펴보십시오. 몇 가지 다른 장소에서 설정할 수있는 텍스트가있는 로고가 있습니다. 여기서 설정을 보면 모양이 같습니다.

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를 통해 사용 가능한 "디자이너"개체에서 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); 

현재 시점에서 홈 페이지가 null입니다. 더 많은 테스트를하기 위해 나는 homePage.getPath() 대신 currentPage.getPath()를 전달하려고 시도했다. 이게 currentPage 리소스를 줄 것이며 end에 currentStyle 객체를 생성 할 것이라고 가정했습니다. 이것에 의해, null의 Style 오브젝트가 작성되었습니다. 이것으로부터 나는 잘못된 자원 유형을 전달하고 있다고 나는 확신 할 수 있다고 생각합니다.

Designer resourceType을 얻기를 원하지만 사용할 수없는 리소스에 cq : designPath를로드하려고 시도했습니다.

이전에이 문제가 발생했는지 궁금합니다. 너무 자세히 설명해 주시면 사과드립니다.하지만이 질문에 '이유'를 설명하고 싶습니다. 전체적으로 더 좋은 방법이있는 경우를 대비해서 말이죠.

답변

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"의 정의 매우 흥미로운 Design.getStyle 대 designer.getStyle는 조금 다르다. designer.getStyle은 리소스를 요청하지만 Design.getStyle은 디자인 "셀"에 대한 경로를 가져 와서 적절한 Style을 반환합니다.

몇 가지 테스트를했는데 상속 된 스타일/디자인에서 작동하는 것처럼 보입니다. 따라서 내 cq : designPath가 레벨 1로 설정되고 레벨 2에서 페이지를 조회하면 레벨 1에 설정된 cq : designPath에서 디자인/스타일을 반환합니다.

방법.

0

이 방법을 시도했지만 Style 개체에서 스타일을 가져 오지 못했습니다. 우리가 수행 할 때 :이 디자인 객체에서

디자인 homePageDesign = designer.getDesign(homePage);

을 우리는 프로젝트까지의 경로를 얻을 노드 즉, 등 /이 후 설계/myproject라는

우리의 스타일을 추출하려고하면 우리가 얻지 못하는 설계 경로.

그러나 다른 방식으로 구현했습니다.

  1. 디자인 개체에서 (etc/design/myproject)에 대한 디자인의 완전한 JSON을 얻을 수도 있습니다.

  2. 대상 페이지의 슬링 : resourceType을 가져 와서 마지막 색인 "/"다음의 값을 가져옵니다.

  3. 이 JSON에 마지막 값이 포함되어 있는지 확인하십시오. 포함되어 있으면 스타일, 즉 이미지 등을 얻을 수 있습니다.
관련 문제