C# 使用Sitecore()格式化Sitecore日期。字段()?
我需要为日期使用自定义格式(即,C# 使用Sitecore()格式化Sitecore日期。字段()?,c#,sitecore,sitecore7,sitecore7.5,C#,Sitecore,Sitecore7,Sitecore7.5,我需要为日期使用自定义格式(即,dddd-dd-MMMM-yyyy)。是否可以将此格式传递到Sitecore().Field()?我想这样做: public static HtmlString RenderField(this SitecoreHelper sitecoreHelper, string fieldNameOrId, Item item, bool disableWebEdit = false, SafeDictionary<string> parameters
dddd-dd-MMMM-yyyy
)。是否可以将此格式传递到Sitecore().Field()
?我想这样做:
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
});
}
@Html.Sitecore().Field(“Day1”,新的{@format=“dddd-dd-MMMM-yyyy”})
然而,在谷歌搜索之后,我发现我要么要创建一个自定义字段助手来完成这项工作,要么要创建一个自定义模型。使用基本Sitecore真的没有办法做到这一点吗?通过Sitecore().Field()
完成这项工作非常重要,因为我需要内容编辑器来编辑值
据我所知,我们使用的是Sitecore 7.5,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);
}
}
John West在此处介绍如何扩展sitecore帮助程序:
我修改了@siteCoreclimper答案,因为它不适用于呈现子项,因为它使用默认的
RenderingContext.Current
因此,我更新了每个方法参数并添加了项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
});
}
public static HtmlString RenderField(此SitecoreHelper SitecoreHelper,字符串字段名ORID,项项项,bool disableWebEdit=false,SafeDictionary参数=null)
{
if(参数==null)
{
参数=新的SafeDictionary();
}
返回sitecoreHelper.Field(fieldNameOrId,item,
新的
{
DisableWebEdit=DisableWebEdit,
参数=参数
});
}
因此,在我的MVC视图中,我现在可以:
@foreach (Item item in @Model.Item.Children)
{
<div class="event-date">
@Html.Sitecore().RenderDate("Date", item, "d MMM")
</div>
}
@foreach(@Model.Item.Children中的项目)
{
@Html.Sitecore().RenderDate(“日期”,项,“d MMM”)
}
您可以使用下面的字段呈现语法格式化日期,该语法简单且现成
@Html.Sitecore().Field("Date Field", new {format="MMM dd, yyyy"})
就这样。格式值利用了。对于那些在处理空格时遇到问题的人,只需将所有空格替换为“\n” 这里举一个例子:
@Html.Sitecore().Field(datefield, new {format="MMM\ndd,\nyyyy"})
谢谢,行得通。另外,我只想确认与我的原始问题相关的任何内容都不需要标记域方法,对吗?@MrSnappingTurtle you's right标记域未使用。如果答案正确,请把它标为正确。其他人将来会使用此响应。@SiteCoreClimper,我已经使用但修改了您的代码,因为我需要将其用于当前上下文项的子项。修改了下面的答案。好吧,但你为什么要给出其他答案呢?:)我不认为这在Sitecore 8中是必要的,我认为它已在更高版本中引入,因为这在SXP8.2@Html.Sitecore().Field(“开始日期”,new{format=“dd MMMM yyyy”})中非常适合我。我记得这是参加Sitecore开发者在线学习时的一个选项。如果我没弄错的话,第四单元。这门课是第8课。