如何在sitecore中创建具有不同模板的项目集

如何在sitecore中创建具有不同模板的项目集,sitecore,Sitecore,我在clarisonic目录下有一组项目。我想在其他地方创建同一组项目。例如,我想在amazon下使用不同的模板创建同一组项目 首先,我在clarisonic目录下获取所有子项,并获取这些项的名称。我在Amazon下创建新项,使用之前使用不同模板获得的名称 我想在amazon[clarisonic目录下的所有项目]下创建相同的项目集 public void EntryPath(Item item) { List<string> ObjSiteN

我在clarisonic目录下有一组项目。我想在其他地方创建同一组项目。例如,我想在amazon下使用不同的模板创建同一组项目

首先,我在clarisonic目录下获取所有子项,并获取这些项的名称。我在Amazon下创建新项,使用之前使用不同模板获得的名称

我想在amazon[clarisonic目录下的所有项目]下创建相同的项目集

public void EntryPath(Item item)
        {
            List<string> ObjSiteNames = getMultiListValues(item, "Select Site");
            GetChildrenSelectedItem(item, ObjSiteNames);
            RecursiveItemCreation(item);
        }


        public List<string> getMultiListValues(Sitecore.Data.Items.Item item, string FieldID)
        {

            Sitecore.Data.Fields.MultilistField multiselect = item.Fields[FieldID];
            return multiselect.GetItems().Select(a => a.Name).ToList();
        }

        public void GetChildrenSelectedItem(Item getChildredItem, List<string> sitesnmaes)
        {
            string defaultSitePath = "/sitecore/content/Administration/Sites";

             masterDb = Sitecore.Configuration.Factory.GetDatabase("master");
            templateItem = masterDb.GetItem("/sitecore/templates/User Defined/SC-DW Data/Generic/Widgets/NavigationItem");
            foreach (string str in sitesnmaes)
            {
                StringBuilder strBuilder = new StringBuilder();
                strBuilder.Append(defaultSitePath).Append("/").Append(str);
                itemDesPath = masterDb.GetItem(strBuilder.ToString());
            }
        }

        public void RecursiveItemCreation(Item Getchilds)
        {
            foreach (Item i in Getchilds.GetChildren())
            {
                i.Template = masterDb.GetItem("/sitecore/templates/User Defined/SC-DW Data/Generic/Widgets/NavigationItem").
                if ((i.HasChildren))
                {

                }
                else
                {
                    itemDesPath.Add(i.Name, templateItem);
                    foreach (Item ItemDes in itemDesPath.Axes.GetDescendants())
                    {
                        if (ItemDes.Name == i.Name)
                        {
                            ItemDes.Editing.BeginEdit();
                            ItemDes.Fields["Datasource"].Value = i.Paths.Path;
                            ItemDes.Editing.EndEdit();
                        }
                    }
                }
            }
public void入口路径(项)
{
List ObjSiteNames=getMultiListValues(项目“选择站点”);
GetChildrenSelectedItem(项,对象名称);
递归项目创建(项目);
}
公共列表getMultiListValues(Sitecore.Data.Items.Item项,字符串字段ID)
{
Sitecore.Data.Fields.MultilistField multiselect=item.Fields[FieldID];
返回multiselect.GetItems();
}
public void GetChildrenSelectedItem(项getChildredItem,列表站点名称)
{
字符串defaultSitePath=“/sitecore/content/Administration/Sites”;
masterDb=Sitecore.Configuration.Factory.GetDatabase(“master”);
templateItem=masterDb.GetItem(“/sitecore/templates/User-Defined/SC-DW-Data/Generic/Widgets/NavigationItem”);
foreach(sitesnmaes中的字符串str)
{
StringBuilder strBuilder=新StringBuilder();
strBuilder.Append(defaultSitePath).Append(“/”).Append(str);
itemDesPath=masterDb.GetItem(strBuilder.ToString());
}
}
public void RecursiveItemCreation(Item Getchilds)
{
foreach(Getchilds.GetChildren()中的项目i)
{
i、 Template=masterDb.GetItem(“/sitecore/templates/User-Defined/SC-DW-Data/Generic/Widgets/NavigationItem”)。
如果((i.有子女))
{
}
其他的
{
添加(i.Name,templateItem);
foreach(ItemDePath.Axes.GetDescents()中的ItemDes项)
{
if(ItemDes.Name==i.Name)
{
ItemDes.Editing.BeginEdit();
ItemDes.Fields[“Datasource”].Value=i.Paths.Path;
ItemDes.Editing.EndEdit();
}
}
}
}

据我所知,您希望将
Clarisonic目录下的整个树
项复制到
Amazon
节点。唯一的区别是创建的项应使用不同的模板(
/sitecore/templates/User Defined/SC-DW Data/Generic/Widgets/NavigationItem

下面的代码应该可以完成这项工作。我还没有测试过它,但我相信您可以解决所有遇到的问题

public void CopyTreeStructure(项目源、项目目标)
{
//找到要使用的新模板
TemplateItem newTemplate=newTemplateItem(source.Database.GetItem(“/sitecore/templates/User-Defined/SC-DW-Data/Generic/Widgets/NavigationItem”);
foreach(source.Children中的子项)
{
//使用新模板创建原始项目的副本
Item copiedItem=CreateItemUsingNewTemplate(子级、目标、newTemplate);
//对所有子体递归重复此操作
CopyTreeStructure(child,copiedItem);
}
}
私有项CreateItemUsingNewTemplate(项源、项目标父项、TemplateItem TemplateUse)
{
//创建项目
Item copiedItem=targetParent.Add(source.Name,templateToUse);
//预读所有字段
source.Fields.ReadAll();
使用(新编辑上下文(copiedItem))
{
//更新新项目的所有字段
foreach(source.Fields中的字段)
{
copiedItem[field.Name]=源[field.Value];
}
}
//返回复制的项,以便我们可以复制其子体
返回copiedItem;
}

我想你可能需要重新表述这个问题;我发现你问的到底是什么还不清楚。是的,我也不知道你在问什么……也许你想了解一下,我想他们要求的是分支模板的功能,但在创建时增加了设置结果项模板的功能。