我在sitecore标准值中设置datetime字段的默认值时遇到问题。 我知道$ date取当前日期。如果我在日期时间字段的标准值中指定$ date,则日期始终为“1/1/0001”。
我该如何解决这个问题?
答案 0 :(得分:3)
可以在标准值的字段中输入标记,然后将其替换为其他值,但仅当创建使用该模板的新项目时 。它不会为使用此模板的现有项目设置日期。
$ date 是其中一个令牌,它会替换为系统日期( yyyyMMdd )。
John West撰写的博客文章解释了如何Expand Standard Values Tokens in Existing Items with the Sitecore ASP.NET CMS。
修改强>
以下代码是MasterVariablesReplacer
类的一部分,用于替换 $ date 标记:
text = this.ReplaceWithDefault(text, "$date", (Func<string>) (() => DateUtil.IsoNowDate), context);
从ReplaceVariables
处理器调用它,该处理器是expandInitialFieldValue
管道的一部分(对于所有/sitecore/admin/showconfig.aspx
处理器,请参阅expandInitialFieldValue
)。
您可以尝试将自己的处理器添加到此管道中,看看$date
未正确替换的原因:
public class ReplaceVariables : ExpandInitialFieldValueProcessor
{
public override void Process(ExpandInitialFieldValueArgs args)
{
Assert.ArgumentNotNull((object) args, "args");
MasterVariablesReplacer variablesReplacer = Factory.GetMasterVariablesReplacer();
string text = args.SourceField.Value;
if (variablesReplacer == null)
args.Result = text;
else
args.Result = variablesReplacer.Replace(text, args.TargetItem);
}
}