Sitecore GlassMapper MVC 向模型添加标准字段

Sitecore GlassMapper MVC add standard fields to model

我需要我的商品在特定型号中的排序顺序。

我试过这样但是没有成功:

[SitecoreField("__Sortorder")]
public string SortOrder { get; set; }

知道如何在我的模型中包含标准字段吗?

如果这不可能,实际上我在那种情况下使用清单,GlassMapper 的 AutoMapping 按字母顺序 return 它。

清单字段的定义如下:

IEnumerable<Guid> Filter_Tags_To_Shows  {get; set;}

如前所述,该列表是按字母顺序 return 编辑的,但由于缺少 sortOrder 字段,我没有更改排序顺序。

提前致谢。

这个属性

IEnumerable<Guid> Filter_Tags_To_Shows  {get; set;}

将为您提供您在清单字段中选择的项目的 ID 列表。要获取实际项目的排序顺序,您需要将这些 ID 转换为对象:

var tagsToShow = Filter_Tags_To_Shows.Select(i => SitecoreContext.GetItem<SomeClassType>(i));

假设 SomeClassType 具有 SortOrder 字段,那么您应该能够访问 中每个对象的该字段tagsToShow 并执行如下操作:

var sortedTagsToShow = tagsToShow.OrderBy(i => i.Sortorder);

您的 Filter_Tags_To_Shows 属性 正在 return 生成一个 Guid 的列表,我认为您正在做一些事情以从 Sitecore 获取链接的项目。这不是最有效的方式,Glass 允许您指定链接的项目类型,它将自动映射。

IEnumerable<FilterTagClass> Filter_Tags_To_Shows  {get; set;}

假设 FilterTagClass 的排序顺序与您的问题一样:

[SitecoreType(TemplateId={GUID})]
public class FilterTagClass : GlassBase 
{
    [SitecoreField("__Sortorder")]
    public virtual int SortOrder { get; set; }
}

您可以使用 Linq 进行排序:

@foreach (var tag in Filter_Tags_To_Shows.OrderBy(i => i.SortOrder))
{
    // do stuff
}

这是对来自@DougCouto 的答案的重新哈希处理,但请注意,如果您正确设置了属性和映射,则无需将 ID 转换为对象。

作为使用 Checklist 字段的替代方法,您可以使用 Multilist 字段,这将允许您 select 标签并根据需要重新排序。 Glass 应该 return 它们按照您当时设置的顺序排列。

Checklist 和 Multilist 以原始文本形式存储在 Sitecore 数据库中,序列将根据数据源项目序列进行更新,您可以尝试下面的示例。

Sitecore.Data.Fields.MultilistField multilistField = item.Fields["FieldName"];

foreach (var child in multilistField.GetItems)
{
    // It should provide in short order
}