Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format Sitecore Date using Sitecore().Field()?

I need to use a custom format for a date (i.e. dddd dd MMMM yyyy). Is it possible to pass this format to Sitecore().Field()? I would like to do something like this:

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

However, after some Googling, I found that I either have to create a custom field helper to do this or a custom model. Is there really no way to do this using base Sitecore? It's important this be done through Sitecore().Field() as I need the content editor to be able to edit the value.

We're on Sitecore 7.5

like image 279
Moo Avatar asked Dec 25 '15 22:12

Moo


People also ask

How do you format a date field?

Right-click the date field, and then click Properties. In the Property Sheet, select the format you want from the Format property list.

How do I get the datetime field in Sitecore?

You can use the Sitecore. Data. Fields. DateField class to access data template fields of type Date and Datetime.

Can we change the format of date field in Salesforce?

The format of date and date time fields is controlled by the locale setting of the profile of the user that displays them. This format can be changed by using the "language" attribute on the apex:page tag. In order to change the language of a page the language attribute must be set appropriately in the <apex:page> tag.


1 Answers

As far I know Sitecore doesn't have such a functionality out of the box. You can use a helper for this functionality, please check below code. I used this code and is working fine. You can edit date field also from page editor because the field is edited through Sitecore pipelines.

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 your cshtml you will have:

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

John West write about how to extend sitecore helpers here: 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

like image 89
Vlad Iobagiu Avatar answered Sep 22 '22 01:09

Vlad Iobagiu