Orchard CMS:如何为Tags_ShowTags形状的摘要和详细显示类型显示不同的视图?

时间:2014-05-15 06:41:59

标签: asp.net-mvc-4 orchardcms

我需要为TagsPart显示摘要和详细显示类型的不同视图,但它只包含两个视图的一个形状Tags_ShowTags。

protected override DriverResult Display(TagsPart part, string displayType, dynamic shapeHelper) {
    return ContentShape("Parts_Tags_ShowTags",
        () => shapeHelper.Parts_Tags_ShowTags(Tags: part.CurrentTags.Select(x => new ShowTagViewModel { TagName = x })));
}

有没有办法为形状Tags_ShowTags创建不同的视图?像这样: Tags.ShowTags-MyContentType.Detail.cshtml Tags.ShowTags-MyContentType.Summary.cshtml

2 个答案:

答案 0 :(得分:3)

Marco Serralheiro使用Atlernates的提示允许使用不同的视图进行摘要和细节显示类型,而无需创建额外的形状。请参阅以下示例:

<Match ContentType="MyContentType">
  <Match DisplayType="Summary">
    <Place Parts_Tags_ShowTags="Content:4;Alternate=Parts_Tags_ShowTag_MyContentType_Summary"/>
  </Match>
  <Match DisplayType="Detail">
    <Place Parts_Tags_ShowTags="Content:4;Alternate=Parts_Tags_ShowTag_MyContentType_Detail"/>
  </Match>
</Match>

查看姓名:

/Views/Parts.Tags.ShowTag.MyContentType.Summary.cshtm
/Views/Parts.Tags.ShowTag.MyContentType.Detail.cshtml

答案 1 :(得分:1)

是。您是否尝试过“形状跟踪”工具,以查找该形状的可用替代项(http://docs.orchardproject.net/Documentation/Customizing-Orchard-using-Designer-Helper-Tools)?您还可以查看http://docs.orchardproject.net/Documentation/Alternates - 使用Parts_Tags_ShowTags作为示例来解释替代项。

编辑:

我设法增加了可用替代项的数量(可以在placement.info文件中显式指定它们),如下所示:http://kobowi.co.uk/blog/2012/11/content-display-type-alternates-for-content-parts-in-orchard

在我自己的模块中,我放置了这个&#34; PartContentTypeAlternateFactory.cs&#34;:

using Orchard.DisplayManagement.Implementation;
using System;

namespace MyModule.Name {
    public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
        public override void Displaying(ShapeDisplayingContext context) {
            context.ShapeMetadata.OnDisplaying(displayedContext => {

                var shapeType = displayedContext.ShapeMetadata.Type;
                var contentItem = displayedContext.Shape.ContentItem;

                if (contentItem == null) return;

                var displayType = displayedContext.ShapeMetadata.DisplayType;
                var contentType = contentItem.ContentType;

                // add a couple more alternates
                displayedContext.ShapeMetadata.Alternates.Add(
                    String.Format("{0}__{1}", shapeType, displayType));
                displayedContext.ShapeMetadata.Alternates.Add(
                    String.Format("{0}__{1}__{2}", shapeType, (string)contentType, displayType));
            });
        }
    }
}

这给了我更多选择的替代品,&#34;开箱即用&#34;。它们甚至出现在Shape Tracing工具中,可以使用它来创建适当的cshtml文件。