2017-08-30 7 views
0

特定のモデルでアイテムのソート順が必要です。Sitecore GlassMapper MVC標準フィールドをモデルに追加する

私はこのようにそれを試してみましたが、

運:

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

私は私のモデルの標準フィールドを含めることができますどのように任意のアイデア?

これが可能でない場合、実際には、この場合チェックリストを使用しています。GlassMapperの自動マッピングではアルファベット順に返されます。ここで

は、チェックリストフィールドの定義である:前述

IEnumerable<Guid> Filter_Tags_To_Shows {get; set;} 

などは、リストがアルファベット順に返されますが、私ははsortOrder場が不足しているために、ソートその後何の変化もありません。

ありがとうございました。

+0

上記のコードではどのような問題がありますか?Glassがフィールドを全くマッピングしていないか、またはフィールドをマッピングしていますが、値が正しくありませんか?文字列の代わりにフィールド型をint型に変更しようとしましたか? – DougCouto

+0

はいintは0を返し、stringはnullを返します。だから私はマッピングが行われていないと思う。しかし、その項目にはソート順の値があります。 – Bgl86

+0

フィールドをAppearanceというクラスに移動し、そのフィールドが実際にどこにあるAppearanceクラスのTemplateIdを持つSitecoreTypeデコレータを使用してクラスを修飾できますか?テストのように。 Glassのバージョンでは、クラスが表すテンプレートにフィールドが存在する必要があります(Glassのバージョンで要件が満たされているかどうかはわかりません)。 – DougCouto

答えて

1

はあなた、あなたがして目を得るために何かをしているがSitecoreからItemをリンクしました。これは最も効率的な方法ではなく、Glassは、それらが自動化するリンクされたアイテムタイプを指定することを許可します。これが答えの再ハッシュある

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

:あなたはLINQの使用して並べ替えることができます

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

IEnumerable<FilterTagClass> Filter_Tags_To_Shows {get; set;} 

FilterTagClassは、あなたの質問のように指定したソート順を持っていると仮定すると、 @DougCoutoから取得しますが、プロパティを設定して正しくマッピングする場合、IDをオブジェクトに変換する必要はありません。

Checklistフィールドを使用する代わりに、Multilistフィールドを使用すると、必要に応じてタグを選択して並べ替えることができます。 Glassはあなたが設定したのと同じ順序でそれらを返すべきです。

1

このプロパティ

IEnumerable<Guid> Filter_Tags_To_Shows {get; set;} 

あなたがチェックリスト]フィールドで選択したアイテムのIDのリストが表示されます。実際のアイテムのソート順を取得し、あなたがオブジェクトにこれらのIDを変換する必要がありますするには:

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

SomeClassTypeSORTORDERフィールドを持っていると仮定すると、あなたはその後、内の各オブジェクトに対して、そのフィールドにアクセスすることができるはずですtagsToShowこのような何か:Filter_Tags_To_Showsプロパティは、私は推測、Guidのリストを返す

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

ありがとうDoughCouto。前述のように、私はSomeClassTypeにSortOrderフィールドを追加しましたが、値はintとして0、文字列としてnullです。何とかGlassMapperはこれを自動化しません。たぶん私はそれらを実際のSitecoreアイテムに変換し、次にsortorderフィールドを持っています。 – Bgl86

+0

どういうわけかこれは今、うまくいきましたDoughCoto! – Bgl86

0

チェックリストとマルチリストは、Sitecoreデータベースに生テキストとして保存され、シーケンスはデータソースアイテムシーケンスに基づいて更新されます。以下のサンプルを試すことができます。

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

foreach (var child in multilistField.GetItems) 
{ 
    // It should provide in short order 
} 
関連する問題