2015-12-25 9 views
5

日付のカスタムフォーマット(dddd dd MMMM yyyy)を使用する必要があります。このフォーマットをSitecore().Field()に渡すことは可能ですか?私はこのような何かをしたいと思います:Sitecore()を使用したSitecoreの日付フィールド()?

@Html.Sitecore().Field("Day1", new { @format="dddd dd MMMM yyyy"})

しかし、いくつかのGoogleをした後、私は私のどちらかがこれを行うには、カスタムフィールドヘルパーやカスタムモデルを作成する必要があることがわかりました。実際にベースのSitecoreを使用してこれを行う方法はありますか?値を編​​集できるようにコンテンツエディタが必要なので、これはSitecore().Field()で行うことが重要です。

私たちは、私の知る限りは、サイトコアは、箱から出して、このような機能はありません知っているサイトコア7.5

+3

を私はそれはそれ以降のバージョンで導入されてきたと思いますこれはSXP8.2 @ Html.Sitecore()。フィールドに私のために正常に動作しますので、私はサイトコアの開発者向けeラーニングに出席しながら、これはオプションであることを覚えて – Zooking

+0

を(、新しい{フォーマット=「MMMMのYYYYをDD」}「開始日」)。私が間違っていなければモジュール4。コースはSitecore 8です。 –

答えて

4

にしています。 この機能のためにヘルパーを使用できます。以下のコードを確認してください。 このコードを使用して正常に動作しています。フィールドはSitecoreパイプラインによって編集されるため、ページエディタからも日付フィールドを編集できます。あなたのCSHTMLで

public static class Helper 
{ 

    public static HtmlString RenderField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     string fieldNameOrId, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     if (parameters == null) 
     { 
      parameters = new SC.Collections.SafeDictionary<string>(); 
     } 

     return sitecoreHelper.Field(
      fieldNameOrId, 
      new 
      { 
       DisableWebEdit = disableWebEdit, 
       Parameters = parameters 
      }); 
    } 

    public static HtmlString RenderField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     SC.Data.ID fieldId, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     return RenderField(
      sitecoreHelper, 
      fieldId.ToString(), 
      disableWebEdit, 
      parameters); 
    } 

    public static HtmlString RenderDate(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     string fieldNameOrId, 
     string format = "D", 
     bool disableWebEdit = false, 
     bool setCulture = true, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     if (setCulture) 
     { 
      Thread.CurrentThread.CurrentUICulture = 
       new CultureInfo(SC.Context.Language.Name); 
      Thread.CurrentThread.CurrentCulture = 
       CultureInfo.CreateSpecificCulture(SC.Context.Language.Name); 
     } 

     if (parameters == null) 
     { 
      parameters = new SC.Collections.SafeDictionary<string>(); 
     } 

     parameters["format"] = format; 
     return RenderField(
      sitecoreHelper, 
      fieldNameOrId, 
      disableWebEdit, 
      parameters); 
    } 

    public static HtmlString RenderDate(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     SC.Data.ID fieldId, 
     string format = "D", 
     bool disableWebEdit = false, 
     bool setCulture = true, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     return RenderDate(
      sitecoreHelper, 
      fieldId.ToString(), 
      format, 
      disableWebEdit, 
      setCulture, 
      parameters); 
    } 

    public static HtmlString TagField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     string fieldNameOrId, 
     string htmlElement, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     SC.Data.Items.Item item = 
      SC.Mvc.Presentation.RenderingContext.Current.ContextItem; 

     if (item == null || String.IsNullOrEmpty(item[fieldNameOrId])) 
     { 
      return new HtmlString(String.Empty); 
     } 

     string value = sitecoreHelper.RenderField(
      fieldNameOrId, 
      disableWebEdit, 
      parameters).ToString(); 
     return new HtmlString(String.Format(
      "<{0}>{1}</{0}>", 
      htmlElement, 
      value)); 
    } 

    public static HtmlString TagField(
     this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper, 
     SC.Data.ID fieldId, 
     string htmlElement, 
     bool disableWebEdit = false, 
     SC.Collections.SafeDictionary<string> parameters = null) 
    { 
     return TagField(
      sitecoreHelper, 
      fieldId.ToString(), 
      htmlElement, 
      disableWebEdit, 
      parameters); 
    } 
} 

あなたが持っているでしょう。ここにサイトコアヘルパーを拡張する方法について

 @Html.Sitecore().RenderDate("Name of field or id", "your format") 

ジョン・ウェスト書き込み: http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2012/06/sitecore-mvc-playground-part-4-extending-the-sitecorehelper-class.aspx

+0

ありがとう、それは動作します。また、私は、TagFieldメソッドが私の元の質問に関連する何にも必要でないことを確認したいのですが、正しいのですか? – MrSnappingTurtle

+0

@MrSnappingTurtleあなたは正しいタグフィールドが使用されていません。答えが正しい場合は、正しい印を付けてください。他の人はこの応答を将来使用します。 –

+1

@SitecoreClimber、私は使用しましたが、あなたのコードを変更しました。私は現在のコンテキスト項目の子に使用する必要があったからです。下の修正された答え。 – Juri

0

をそうでないので、私は、@SitecoreClimberの答えを修正しましたそれはだから私は前夜を更新したデフォルトRenderingContext.Current

を使用していますので、子供たちのアイテムをレンダリングするための作業RYメソッドの引数とItem itemを追加し、基本フィールドレンダリングのためにその項目を使用し、次のように:

public static HtmlString RenderField(this SitecoreHelper sitecoreHelper, string fieldNameOrId, Item item, bool disableWebEdit = false, SafeDictionary<string> parameters = null) 
    { 
     if (parameters == null) 
     { 
      parameters = new SafeDictionary<string>(); 
     } 

     return sitecoreHelper.Field(fieldNameOrId, item, 
      new 
      { 
       DisableWebEdit = disableWebEdit, 
       Parameters = parameters 
      }); 
    } 

は、だから私のMVCのビューでは、私が今持っていることができます。

@foreach (Item item in @Model.Item.Children) 
{ 
    <div class="event-date"> 
     @Html.Sitecore().RenderDate("Date", item, "d MMM") 
    </div> 
} 
関連する問題