2012-06-01 2 views
-1

세 번째 수준에서 componentlink 필드 이름에 액세스하는 방법은 무엇입니까? 나는 임베디드 스키마로 필드를 포함하는 스키마를 가지고 있는데, 임베디드 스키마에는 다른 스키마에서 파생 된 컴포넌트 링크가 있습니다. 어떻게 그 스키마의 필드를 검색 할 수 있습니까?세 번째 수준에서 componentlink 필드 이름에 액세스하는 방법은 무엇입니까?

+1

사용하려는 API를 지정하고 질문의 이름을 적절하게 바꿔 주실 수 있습니까? –

답변

6

내가 아는 한, 임베디드/컴포넌트 링크를 제어하려면 특별한 DWT TBB가 필요합니다. Nuno의 Get Extensions를 사용할 수 있습니까? http://www.sdltridionworld.com/community/extension_overview/dreamweaver_get_extension.aspx 아니면 면도기 중재자를 사용 : 정말 그 필드 (들)의 목적에 따라 http://www.sdltridionworld.com/community/2011_extensions/razormediator.aspx

+0

DWT를 사용하는 경우 DW Get 확장 프로그램을 고려해야합니다. –

7

는, 아마도 당신이 좀 더 많은 정보를 제공 할 수 ?

여기에 언급되지 않은 또 다른 옵션은이 세 번째 수준의 구성 요소를 패키지에 추가하기 위해 자체 C# 구성 요소를 작성하는 것입니다. 그렇게함으로써 DWT 레이아웃에서 작업하는 것이 훨씬 더 간단 해집니다.

예를 들어

세 번째 수준의 항목 사무실 위치의 목록을 생성하는 데 사용하는 경우, 당신은 모든 관련 사무실 위치 구성 요소를 얻기 위해 C 번호 블록을 작성하고 구성 요소 목록으로 패키지에 추가 할 수 '위치'는 DWT에서해야 할 일은 그 항목을 반복하고 필요한 디스플레이를 제공하는 것입니다.

개인적으로 저는 DWT에 기능을 추가/사용하고 싶지 않습니다. 가능한 한 간단하게 유지하려고합니다. 다시 말해서 커뮤니티에서 더 좋은 대답을 얻을 수있는 시나리오에 대한 정보를 제공 할 수 있습니다.

5

DGX (MDa가 제안한대로)를 사용하지 않거나 John Winter가 제안한대로 C# TBB를 작성하지 않으려면 RenderComponentPresentation을 호출하여 사용할 템플릿으로 렌더링 된 구성 요소를 렌더링 할 수 있습니다.

<!-- TemplateBeginRepeat name="Component.Fields.LinkFieldName" --> 
    @@RenderComponentPresentation(Field, "tcm:1-23-32")@@ 
<!-- TemplateEndRepeat --> 

경우 tcm:1-23-32 그것은 단순히 하이퍼 링크로 구성 요소의 이름을 렌더링하는 구성 요소 템플릿의 TCM URI.

: 관련 주제는 이러한 다른 질문/답변에 이미 포함되어 있는지 등 당신이 단순히 Component.Title, Component.Fields.Field1 같은 링크 된 구성 요소의 모든 필드와 속성을 참조 할 수 있습니다 tcm:1-23-32에서 사용하는 DWT,

주 내부 Retrieving values of a linked component in Dreamweaver TBB - and making it SiteEditable

  • 중첩 된 임베디드 스키마를 처리 - - 링크 된 구성 요소의 Looping through the multiple component links to get the schema name of the linked component in Dreamweaver TBB in SDL Tridion 2011
  • 지고 값 -

    어떻게 든 도움이되지 않는다면, 구성하려는 XML과 게시하려고하는 DWT를 게시하는 것이 좋습니다. 여기

  • 4

    당신이 정말로 빠른 필드 구조를 탐색하고 결과를 얻을 수 있습니다 Linq에를 사용하여 C#을

    Session session = engine.GetSession(); 
    Item componentItem = package.GetByName(Package.ComponentName); 
    Component component = new Component(new TcmUri(componentItem.GetValue("ID")), session); 
    
    ItemFields itemFields = new ItemFields(component.Content, component.Schema); 
    IEnumerable<ComponentLinkField> ie = itemFields.OfType<EmbeddedSchemaField>().OfType<ComponentLinkField>(); 
    for (IEnumerator<ComponentLinkField> e = ie.GetEnumerator(); e.MoveNext();) { 
        Component linkedComponent = e.Current.Value; 
    } 
    

    를 사용하여 빠른 샘플. 그것은 세 번째 레벨의 컴포넌트 링크를 제공 할 것입니다. 물론 같은 것을 사용하여 구조에서 더 깊어 질 수 있습니다.

    관련 문제