2016-10-18 5 views
0

Umbraco에서 편집자를위한 계층 적 관계를 유지할 수있는 몇 가지 다른 문서 유형을 설정했습니다. 따라서 문서 유형 B의 "하위"를 허용하도록 문서 유형 A를 구성했습니다. 또한 문서 유형 C의 "하위"를 허용하도록 문서 유형 B를 구성했습니다.Umbraco에서 부모/자식 콘텐츠 관계 다루기

보기의 목록에서 나는 유형 A의 특정 조상을 공유하는 유형 C (즉, 유형 B의 직계 상위 항목은 무의미 함). I 컨트롤러이 같은 코드를 사용

var rootChildren = Umbraco?.TypedContent(RootId)?.Children; 
var items = rootChildren 
    .SelectMany(rc => rc?.Children? 
     .Where(c => c != null 
      && c.GetPropertyValue<Boolean>(FieldNames.SomeValue))); 
var viewModels = allItems.Select(p => new SomeViewModel 
    { 
     // Object initialization code 
    }); 
return viewModels.ToArray(); 

RootId 값이 ConfigurationSection로부터 판독되며, 따라서 변경 될 수 있거나 또는 서로 다른 환경에서 비 - 동일.

내 단점은 내 코드가 백 오피스의 편집자를 위해 설정 한 내용과 얽혀 있다는 것입니다. IEnumerable<IPublishedContent>.DescendantsOrSelf(SomeDocumentTypeAlias)과 같은 "소프트"선택 방법을 사용하여 부분적으로 해결할 수 있다고 생각합니다. (어떤 문서 유형에 묶여 있다고 가정하면 CMS와 함께 작업 할 때 번거롭고 번거롭지 않은 업무라고 생각합니다.)

DescendantOrSelf과 같은 "소프트"선택 방법은 어떤 문제를 해결하지 못합니다. 노드를 시작점으로 사용합니다. 사이트 루트에는 유형 A 콘텐츠가 여러 개있을 수 있으므로이 유형의 문서 유형으로는 이동할 수 없습니다.

또한 노드 ids는 Umbraco에서 개발자와 다른 환경 사이에서 내용을 공유하는 것으로 예상 할 수 없기 때문에 버전 제어 관점에서 완벽하지는 않기 때문에 구성을 기반으로 한 솔루션에 전혀 만족하지 않습니다.

ASP.NET MVC 등을 잘 알고 있지만, Umbraco의 모범 사례에 대해서는 아직 많이 알지 못합니다. 그래서 이것이 제가 묻고있는 것입니다. Umbraco 개발자로서 어떻게 경험 해보시겠습니까?

답변

0

하지 나는이 문제가 이유를 얻을 수 있지만, 여기에 ... 간다 완전히 확인 죄송합니다 제가 뭔가 잘못 이해하는 경우 : -/

AFAIK, 당신은 당신이 쿼리 같은가 someting에서 원하는 것을 얻을 수있을 것를 : 구성에 대한

Umbraco?.TypedContent(ParentId)?.Descendants().OfTypes("yourDocType") 

(최고 RootId을 얻는 방법), 당신은 할 노드를 선택하여 루트 노드의 문서 타입의 노드 선택기 속성을 생성 (또는 목록에하는 표시 될 위치에 다른 곳에서 관련) 이렇게 및 수 "root"/ parent로 사용됩니다.

개발자가 데이터베이스를 공유하면 노드 ID가 설정되고 작동하며 코드를 배포하면 각 환경마다 고유 한 ID가 백엔드/데이터베이스를 통해 설정됩니다.

사이트 당 하나의 노드 ID 만 설정하면 대단히 "설정하고 잊어 버리는"시나리오이지만 여러 목록을 사용하면 편집자가 부모 노드를 쉽게 선택할 수 있습니다.

+0

의견을 보내 주셔서 감사합니다. 편집 환경에 이미 몇 가지 구성 옵션이 있습니다. 노드 선택 도구를 추가하면 좋은 제안처럼 보입니다. 나 또한'OfTypes()'옵션을 사용했다. 그것이 문제가된다면 나는 그것을 다루 겠고, 그것이 제공하는 유연성이 바람직하다. –