Sitecore 仅在父项不存在时才在父项下创建项的最佳方法
Sitecore best way to create an item under parent Item only when it does not exist
在 sitecore 中,假设我下面有一个项目 parentItem
我想创建一个基于模板 templateItem
的项目 childItem
,仅当 childItem
不存在。
因此只有当该项目不存在时才应执行以下代码。
parentItem.Add("Child Item", templateItem);
你说项目存在是什么意思?同名物品?在 Sitecore 中,可以有多个项目名称相同。这些项目实际上并不相同,并且具有不同的 ID。
因此,为了避免在同一父级下创建同一个模板的另一个同名子项,您需要将构造升级为以下内容:
string itemName = "Child item";
if(!dataItem.Children.Any(i=>i.Name == itemName && i.TemplateID == templateItem.ID))
{
dataItem.Add(itemName, templateItem);
}
当然,将上面的子句随处可见并不是一个好主意,因此您可能希望在每次创建项目时自动执行该子句。为此,请使用自定义事件处理程序创建自定义 item:creating 事件处理程序,如下所示:
<event name="item:creating">
<handler type="Your.Type, Your.Assembly.Name" method="OnItemCreating" />
并在 OnItemCreating 方法中,实现与上面相同的代码段。
希望对您有所帮助!
在 sitecore 中,假设我下面有一个项目 parentItem
我想创建一个基于模板 templateItem
的项目 childItem
,仅当 childItem
不存在。
因此只有当该项目不存在时才应执行以下代码。
parentItem.Add("Child Item", templateItem);
你说项目存在是什么意思?同名物品?在 Sitecore 中,可以有多个项目名称相同。这些项目实际上并不相同,并且具有不同的 ID。
因此,为了避免在同一父级下创建同一个模板的另一个同名子项,您需要将构造升级为以下内容:
string itemName = "Child item";
if(!dataItem.Children.Any(i=>i.Name == itemName && i.TemplateID == templateItem.ID))
{
dataItem.Add(itemName, templateItem);
}
当然,将上面的子句随处可见并不是一个好主意,因此您可能希望在每次创建项目时自动执行该子句。为此,请使用自定义事件处理程序创建自定义 item:creating 事件处理程序,如下所示:
<event name="item:creating">
<handler type="Your.Type, Your.Assembly.Name" method="OnItemCreating" />
并在 OnItemCreating 方法中,实现与上面相同的代码段。
希望对您有所帮助!