2013-02-06 2 views
4

세부 정보를 표시하는 쿼리를 사용하는 위젯이 있습니다. 창 부품의 표시 유형을 지정할 수 있습니까 (쿼리는 요약을 사용하고 모든 것이 표시됩니다). 위젯의 헤더에 표시 유형이 Detail이고 요약을 사용할 수 있기 때문에 모양을 무시할 수 있습니다. 다른 섹션 (주로 헤더 텍스트)에 배치 할 때 콘텐츠 영역에있을 때 세부 사항이되기를 원할 것입니다. 부트 스트랩 테마를 사용하고 있습니다. 그래서 기본적으로 만약 내가 어디에 내 내용을 내가 원하는 콘텐츠 이외의 내 위젯을 스틱과수원 CMS 위젯 디스플레이 유형

희망이 되길 바랍니다.

감사합니다.

+2

정확히 무엇을 하려는지는 확실치 않지만 표시 유형을 변경하지 않고 위젯 대체품을 찾는 것처럼 보입니다. –

+0

나는 대체 displaytype로 그것을하기를 바랬지 만 위젯은 매번 디스플레이 타입을 세부적으로 렌더링하므로별로 갈 길이 없다. 위젯을 생성하면 해당 뷰 또는 유사한 것을 지정할 수 있습니다. 나는 틀렸지 만 대체 할 수는 없다. – Jonnymaboy

+0

@BertrandLeRoy, 나는 모양을 많이 덮어 썼다. 그러나 그들은 단지 : display (model.content)라는 제목이나 다른 부분에 접근 할 수 없다. 위젯의 제목을 변경하는 것, 즉 h2 대신 h3으로 변경하는 것과 같은 간단한 것을 변경하는 방법을 찾을 수 없기 때문에 여기에 트릭이 없습니다. – Jonnymaboy

답변

3

아, 다시 만나겠습니다.

위젯이 빌드되어 Orchard.Widgets.Filters.WidgetFilter 클래스의 레이아웃에 삽입됩니다. 위젯에 사용되는 디스플레이 유형을 수정하는 방법은 없습니다 (기본값 : WidgetFilter은 기본값 "Detail"을 사용함).

이 문제를 해결하려면 자신의 구현 인 WidgetFilter을 사용할 수 있습니다. 기존 코드를 자신의 클래스에 복사하고 클래스에 [OrchardSuppressDependency("Orchard.Widgets.Filters.WidgetFilter")] 속성을 추가하십시오. 이렇게하면 기존 WidgetFilter이 사용되고 있지 않은지 확인합니다.

OnResultExecuting 메서드를 통해 읽으면 마지막 부분 근처에 BuildDisplay이 호출되어 있음을 알 수 있습니다. 이 메소드의 두 번째 인수는 표시 유형이 될 수 있습니다. widgetPart.Record.Zone을 검사하여 위젯이 배치 된 위치를 확인하고 이에 따라 displayType 매개 변수에 다른 값을 전달할 수 있습니다.

이것이 가장 우아한 방법인지는 확실하지 않지만 시작해야 할 부분입니다. 아마도 다른 누군가가 깔끔한 해결책을 가지고있을 수도 있습니다.

+0

나는이 해결책을 따르고 있지 않다 (아마 내 잘못). 먼저 위젯 프레임 워크의 일부를 대체 할 때 무거운 물건을 다룰 필요가 없기를 바랍니다. 그건 제쳐두고, 당신의 솔루션이 'DisplayType'을 지속하고있는 것처럼 보이고 @Jon이 런타임 정보를 기반으로이 값을 동적으로 얻고 싶다고 생각합니다. 내가 이것을 잘못 읽었나요? –

+0

@Philip 당신 말이 맞습니다. 예를 들고 조금 벗어난 것 같아요. Jon의 질문에 직접 답하도록 편집했습니다. 위젯 프레임 워크의 일부를 "무거운 손으로"교체하는 것은이 방식으로 모두 무시되도록 설계된 것입니다. – mdm

+0

@Philip 당신은 내가 지금 당황 스러웠던 것을 편집증 적으로 만들었습니다.) 필자가 볼 수있는 한, IContentManager의'BuildDisplay'에 들어가면 표시 유형은 BuildDisplayContext에서 전달되기 때문에 불변이됩니다. 따라서 IContentHandler 및 IContentTemplateFilter의 구현 자에서 디스플레이 유형에 액세스 할 수 있지만 변경할 수는 없습니다. 나는 아직도 과수원을 배우고있다. 그래서 나를 틀리게 증명해라! – mdm