在Sitecore中,创建item时是允许重复的节点名字的。但这会造成一个问题,就是内容编辑人员有可能在一个节点下面建立2个同样name的节点,造成两个节点的url一样,前台用户在访问时就无法辨识要访问的到底是哪个item。针对这个问题,除了在业务层面,要求内容编辑人员在命名时遵循一定命名规则,防止name的重复;另外一个方法就是通过程序,在新建item时,自动在name后面加上时间戳。本文主要就介绍如何实现自动在加时间戳的方法。
首先,在web.config 中找到“<event name="item:added">”标签,在这个标签下,增加一个handler:
然后添加代码:
public class InfoItemAdd
{
protected void OnItemAdded(object sender, EventArgs args)
{
if (args == null)
{
return;
}
var item = Event.ExtractParameter(args, 0) as Item;
if (item == null)
{
return;
}
if (item.TemplateID == new ID("{2ABED5B8-6B8F-4CE3-B16F-718C194EB087}"))
{
using (new SecurityDisabler())
{
item.Editing.BeginEdit();
item.Name = item.Name + DateTime.Now.ToString("yyMMddhhmmss");
item.Editing.EndEdit();
//Log.Info("info item's name is changed",this);
}
}
}
}
效果测试:
新建特定template节点时,节点name后会带有时间戳: