2015-12-25 20 views
5

Ich brauche ein benutzerdefiniertes Format für ein Datum (d. H. dddd dd MMMM yyyy). Ist es möglich, dieses Format an Sitecore().Field() zu übergeben? Ich möchte so etwas wie dies tun:Format Sitecore-Datum mit Sitecore(). Feld()?

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

Doch nach einigen googeln, fand ich, dass ich entweder einen benutzerdefiniertes Feld Helfer erstellen diese oder ein benutzerdefiniertes Modell zu tun. Gibt es wirklich keine Möglichkeit, dies mit Basecore zu tun? Es ist wichtig, dass dies über Sitecore().Field() erfolgt, da ich den Inhaltseditor benötige, um den Wert bearbeiten zu können.

Wir sind auf Sitecore 7.5

+3

ich denke, es hat sich in späteren Versionen eingeführt weil das für mich in SXP8.2 funktioniert @ Html.Sitecore(). Feld ("Startdatum", neu {format = "TT MMMM yyyy"}) – Zooking

+0

Ich erinnere mich, dass dies eine Option während des Besuchs der Sitecore Entwickler eLearning ist. Modul 4, wenn ich mich nicht irre. Der Kurs ist Sitecore 8. –

Antwort

4

Soweit ich weiß Sitecores nicht, eine solche Funktionalität aus dem Kasten hat. Sie können einen Helfer für diese Funktionalität verwenden, überprüfen Sie bitte den folgenden Code. Ich habe diesen Code verwendet und funktioniert gut. Sie können das Datumsfeld auch vom Seiteneditor aus bearbeiten, da das Feld über Sitecore-Pipelines bearbeitet wird.

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); 
    } 
} 

In Ihrem cshtml haben Sie:

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

John West schreiben, wie Sitecores Helfer erweitern hier: 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

Danke, das funktioniert. Außerdem möchte ich nur bestätigen, dass die TagField-Methoden für nichts in Bezug auf meine ursprüngliche Frage benötigt werden, richtig? – MrSnappingTurtle

+0

@MrSnappingTurtle Sie sind richtig Tagfield wird nicht verwendet. Wenn die Antwort richtig ist, markieren Sie sie bitte korrekt. Andere werden diese Antwort in Zukunft verwenden. –

+1

@SitecoreClimber, ich habe Ihren Code verwendet, aber geändert, da ich ihn für Kinder des aktuellen Kontextelements verwenden musste. Geänderte Antwort unten. – Juri

0

Ich habe modifizierte @SitecoreClimber Antwort, weil es nicht der Fall ist Arbeit für das Rendern von Kindern, da es Standard verwendet RenderingContext.Current

So habe ich eve aktualisiert ry Argumente Verfahren und hinzugefügt Item item und verwendet dieses Element für Rendering-Basisfeld, wie folgt aus:

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 
      }); 
    } 

in meiner MVC Ansicht So kann ich jetzt haben:

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