2011-03-29 6 views
1

는 내가 좋아하는 콘텐츠 구조를 가지고 말 :Sitecore : 항목 첫 번째 자녀의 콘텐츠를 표시하는 방법?

About Us 
    Information 
    Contact Us 
    Blah 

사용자가 소개 클릭, 나는 그것이 정보 페이지를 표시하는 방법을 만들 수 있습니까?

여러 사이트 섹션에서 필요하므로 링크/리디렉션 하드 코딩이 작동하지 않습니다.

페이지가 첫 번째 자식의 콘텐츠를 표시하도록하려면 어떻게합니까?

<sc:link select="item[1]" /> 

item 컨텍스트 (현재) 항목 아래의 모든 항목을 얻을 것이다, 그리고 [1] 첫 번째를 선택합니다 :

+0

xslt 또는 코드 숨김을 사용하고 있습니까? –

+0

코드 숨김을 사용하고 있습니다 – Bevan

+0

아, 제 답변이 적용되지 않습니다. –

답변

4

내가하려는 일에 대해 설명하는 것이 더 쉽습니다.

"회사 소개"페이지 (예 : Sitecore.Context.Item이 "회사 소개"항목)에있는 경우.

현재 항목이 같은 아이들이있는 경우 당신은 확인할 수 있습니다

if (Sitecore.Context.Item.HasChildren) { /* do something */ } 

당신은 다음과 같은 방법으로 아이들에 액세스 할 수 있습니다

Sitecore.Context.Item.Children 

이 당신이 부를 수있는에 ChildList 개체를 반환합니다 GetArray()를 사용하여 Item []을 가져옵니다. 그냥 맹목적으로 첫 번째 항목을 원하는 경우

는 당신이 부를 수있는 것 같아요 :

Sitecore.Context.Item.Children.ToArray()[0]; //arrays are zero-based, so the first item is 0 and not 1 

그러나 당신이 뭘 하려는지에 대해 조금 작성하려고 (즉, 메뉴 또는 무언가를 만들). 당신은이에 대한 몇 가지 여기에 체크 템플릿,하지만 방법을 추가 할 수 있습니다

+0

저는 사이트 전체 탐색 및 이동 경로를 위해이 작업을 수행하려고합니다.귀하의 제안을 구현했지만 사용자가 부모 개체를 가리키는 내부 링크를 만드는 경우에만 문제가 발생합니다. 첫 번째 자식을 표시하려고 할 때 여전히 부모 페이지/항목을 표시 할 수 있습니다. 아이들이있다). 이게 말이 돼? 어떻게 이런 일이 발생하지 않도록하는 방법에 대한 아이디어? – Bevan

+1

흠 ... 당신이하려고하는 것이 있다면 다음과 같습니다 : "About Us"페이지에 갈 때마다 그들은 첫 아이 ("Information")의 정보를 보여주고, 실제로는 "About Us"페이지의 템플릿에 하위 레이아웃을 만들어 첫 번째 하위 페이지로 리디렉션합니다. 이렇게하면 사용자가 페이지에 어떻게 든 들어가면 항상 하위 페이지로 리디렉션됩니다. 간단하고 (프로그램하기가 쉽다) 실패 할 수있는 인스턴스가 적습니다. – Holger

+0

그래, 그래, 그게 합리적이다. 내가 할께. 감사. – Bevan

2

는 XSLT를 사용하여 '회사 소개'하고 가정하면 상황에 맞는 항목입니다.

1

: 그래서 해당 페이지로 리디렉션됩니다 경우

if (Sitecore.Context.Item.HasChildren) { 
    var children = Sitecore.Context.Item.GetChildren(); 
    Response.Redirect(LinkManager.GetItemUrl(children[0])) 
} 

이 현재 페이지에 아이가있는 경우보고됩니다. 저는 실제로 사무실 위치가있는 법률 회사의 사이트에서이 작업을 수행합니다. 따라서 기본 위치 페이지로 이동하면 알파벳순으로 첫 번째 사무실로 리디렉션됩니다.

2

저는 실제로 우리의 더 큰 웹 사이트 중 하나에 대해이 동작을 구현했습니다. 당신은이 작업을 수행 할 수 있습니다

작업 (나를 위해 작품) 방법은 다음과 같습니다

if (item.TemplateName.ToLower().ToString() == "main menu item") 
{ 

    if (item.Children.Any()) 
    { 
     url = GetItemUrl(item.Children.First<Item>()); 
    } 
    else 
    { 
     url = GetItemUrl(item); 
    } 
} 
else 
{ 
    url = GetItemUrl(item); 
} 

이 경우 GetItemUrl는 URL을 가져 오는 데 사용됩니다,하지만 난 당신이 LinkManager.GetItemUrl를 사용하여 상상할 수 (항목 항목) ;

+0

item.TemplateName이 나를로드하는 데 도움이 되었기 때문에 +1! – Anicho

+0

건배 Anchicho;). – Younes

관련 문제