2017-03-23 8 views
1

내 웹 사이트에는 단일 브라우저 레이아웃 페이지 자리 표시 자에 여러 가지 하위 레이아웃이 포함되어 있습니다.템플릿이 발견 될 때까지 Sitecore 상위 항목을 트래버스하십시오.

내가 뉴스 항목을 포함하고 값과 하위 항목을 얻는 것은 그 뉴스 항목 렌더링을 위해 다음과 같이 내 콘텐츠 구조 내 폴더에 내 sublayouts 중 하나를 데이터 소스를 설정 한 : 나는 또한 얻을 필요하지만

Sitecore.Collections.ChildList childItems; 

if (Sitecore.Context.Database.GetItem(this.DataSource) != null) 
{ 
    childItems = Sitecore.Context.Database.GetItem(this.DataSource).GetChildren(); 
} 
else 
{ 
    litOutput.Text += "You need to set a datasource"; 
    return; 
} 
// Then iterating 
foreach (Item item in childItems){} 

을 Sitecore 내 웹 사이트의 주요 루트에있는 항목으로 하위 레이아웃이 사용할 다른 속성 및 하위 항목을 나타냅니다.

그래서 내 데이터 소스를 정의하면 뉴스 데이터를 얻기 위해 자식을 반복 할뿐만 아니라 기본 루트로 돌아가서 레벨이라는 하위 설정을 SETTINGS라는 폴더로 트래핑해야합니다. 이 항목에는 필드가 들어 있습니다.

주 루트 템플릿은 "Microsite"라 불리우므로 실제로이 템플릿 이름을 찾아 레벨을 설정하여 해당 항목을 가져올 때까지 트래버스하는 방법에 대한 도움이 필요합니다.

희망이 있으며 누구나 접근 방식을 지원할 수 있습니다.

+0

설정 항목에 대한 경로를 이미 지정한 경우 드롭 링크 또는 드롭 링크가있는 것이 좋습니다. 이렇게하면 다른 반복을 다시 수행 할 수 없게됩니다. –

답변

0
query:./ancestor-or-self::*[@@templatename='Microsite']/*[@@name='Settings'] 
이 작동하지만, 그것은 모든 요청에이 작업을 수행하는 아주 좋은 코딩은 아닌 것 같아

...

그리고 당신은 .. 대신 TEMPLATENAME의 templateId에서 사용할 수도가 아닌 '하드 코드'는 이름 "설정".

+0

빠른 응답을 보내 주셔서 감사합니다. 어떻게 쿼리를 구현합니까? var settingsItem = Sitecore.Context.Item.Axes.SelectSingleItem ("./ ancestor-or-self :: * [@@ templatekey = 'Microsite']/* [@@ name = '설정']"); litPanel.Text + = settingsItem.Fields [ "Title"]. 값; – user3779703

+0

System.NullReferenceException가 발생합니다. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 위와 함께. – user3779703