【问题标题】:Format Sitecore Date using Sitecore().Field()?使用 Sitecore().Field() 格式化 Sitecore 日期?
【发布时间】:2015-12-25 22:42:00
【问题描述】:

我需要为日期使用自定义格式(即dddd dd MMMM yyyy)。是否可以将此格式传递给Sitecore().Field()?我想做这样的事情:

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

但是,在谷歌搜索之后,我发现我要么必须创建一个自定义字段助手来执行此操作,要么创建一个自定义模型。使用基础 Sitecore 真的没有办法做到这一点吗?通过Sitecore().Field() 完成这一点很重要,因为我需要内容编辑器才能编辑该值。

我们正在使用 Sitecore 7.5

【问题讨论】:

  • 我认为它已在以后的版本中引入,因为这对我在 SXP8.2 @Html.Sitecore().Field("Start Date", new { format = "dd MMMM yyyy" })
  • 我记得这是参加 Sitecore 开发人员在线学习时的一个选项。模块 4 如果我没记错的话。课程是 Sitecore 8。

标签: c# sitecore sitecore7 sitecore7.5


【解决方案1】:

据我所知,Sitecore 没有这种开箱即用的功能。 您可以为此功能使用助手,请检查以下代码。 我使用了这段代码并且工作正常。您也可以从页面编辑器编辑日期字段,因为该字段是通过 Sitecore 管道编辑的。

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

在您的 cshtml 中,您将拥有:

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

John West 在这里写了关于如何扩展 sitecore 助手的文章: 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

【讨论】:

  • 谢谢,这行得通。另外,我只是想确认与我的原始问题相关的任何事情都不需要 TagField 方法,对吗?
  • @MrSnappingTurtle 你说得对,标签字段未使用。如果答案正确,请将其标记为正确。其他人将来会使用此响应。
  • @SitecoreClimber,我已经使用但修改了您的代码,因为我需要将它用于当前上下文项的子项。修改后的答案如下。
  • 好吧,但你为什么要给出其他答案? :)
  • 我认为这在 Sitecore 8 中是不必要的
【解决方案2】:

您可以使用下面的字段渲染语法来格式化日期,这种语法简单且开箱即用。

@Html.Sitecore().Field("Date Field", new {format="MMM dd, yyyy"})

就是这样。格式值利用了standard date format specifications

【讨论】:

    【解决方案3】:

    对于那些在处理空格时遇到问题的人,只需将所有空格替换为“\n”即可。

    这里是一个例子:

    @Html.Sitecore().Field(datefield, new {format="MMM\ndd,\nyyyy"})
    

    【讨论】:

      【解决方案4】:

      我已经修改了@SitecoreClimber 的答案,因为它使用默认的RenderingContext.Current

      ,因此它不适用于呈现子项

      所以我更新了每个方法参数并添加了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>
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多