Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sitecore插入规则以确保最多(1)个特定类型的子项_C#_Content Management System_Sitecore_Sitecore6 - Fatal编程技术网

C# Sitecore插入规则以确保最多(1)个特定类型的子项

C# Sitecore插入规则以确保最多(1)个特定类型的子项,c#,content-management-system,sitecore,sitecore6,C#,Content Management System,Sitecore,Sitecore6,sitecore中是否有方法确保特定类型的项只能有一个子项?我正在阅读规则引擎烹饪书,但我没有得到太多的细节。我工作过的一个网站要求在某个项目类型下不能存在超过6个子项目。我们考虑使用插入选项规则,但决定放弃这个想法,因为它不阻止复制、移动或复制项目 相反,我们决定使用专门用于此任务的处理程序扩展项:created事件。下面是一个简单的例子,它是如何工作的。一个明显的改进是从父项上的字段获取最大子限制(当然,仅管理员可见)。你甚至可以利用这里的规则引擎 public void OnItemCre

sitecore中是否有方法确保特定类型的项只能有一个子项?我正在阅读规则引擎烹饪书,但我没有得到太多的细节。

我工作过的一个网站要求在某个项目类型下不能存在超过6个子项目。我们考虑使用插入选项规则,但决定放弃这个想法,因为它不阻止复制、移动或复制项目

相反,我们决定使用专门用于此任务的处理程序扩展
项:created
事件。下面是一个简单的例子,它是如何工作的。一个明显的改进是从父项上的字段获取最大子限制(当然,仅管理员可见)。你甚至可以利用这里的规则引擎

public void OnItemCreated(object sender, EventArgs args)
{
    var createdArgs = Event.ExtractParameter(args, 0) as ItemCreatedEventArgs;

    Sitecore.Diagnostics.Assert.IsNotNull(createdArgs, "args");
    if (createdArgs != null)
    {
        Sitecore.Diagnostics.Assert.IsNotNull(createdArgs.Item, "item");
        if (createdArgs.Item != null)
        {
            var item = createdArgs.Item;

            // NOTE: you may want to do additional tests here to ensure that the item
            // descends from /sitecore/content/home
            if (item.Parent != null && 
                item.Parent.TemplateName == "Your Template" &&
                item.Parent.Children.Count() > 6)
            {
                // Delete the item, warn user
                SheerResponse.Alert(
                    String.Format("Sorry, you cannot add more than 6 items to {0}.",
                                      item.Parent.Name), new string[0]);
                item.Delete();
            }
        }
    }
}

你能分享全部细节吗?我是sitecore的新手,我不完全确定从哪里开始。。。。这个事件处理程序去哪里了?下面是一个例子。它很古老,但大部分仍然相关。基本上,您必须在sitecore/events部分下的web.config中添加对此类的引用,并且每次创建项目时都会执行该类。此外,这里还有一个引用示例:
@DerekHunziker-这是一个很好的解决方案!从您的回答中,我推断当和项被移动、复制、复制或创建时会引发
项:created
事件。这是正确的吗?@ZacharyKniebel,我相信复制和复制最终会产生一个项目:在管道中的某个点创建,因为正在创建一个新项目。但是,移动并没有一个单独的事件(项目:移动),您可以为此订阅。