Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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# 以编程方式创建组页Sitefinity后端_C#_Asp.net_Sitefinity - Fatal编程技术网

C# 以编程方式创建组页Sitefinity后端

C# 以编程方式创建组页Sitefinity后端,c#,asp.net,sitefinity,C#,Asp.net,Sitefinity,我已经搜索了,但找不到任何关于如何在SiteFinityAPI中创建组页面的文档。我知道如何以编程方式创建页面 var pageDataId = Guid.NewGuid(); PageManager manager = PageManager.GetManager(); PageData pageData = null; PageNode pageNode = null; // Get the parent node Id if (paren

我已经搜索了,但找不到任何关于如何在SiteFinityAPI中创建组页面的文档。我知道如何以编程方式创建页面

    var pageDataId = Guid.NewGuid();

    PageManager manager = PageManager.GetManager();
    PageData pageData = null;
    PageNode pageNode = null;

    // Get the parent node Id
    if (parentPageNodeId == Guid.Empty)
    {
        parentPageNodeId = SiteInitializer.CurrentFrontendRootNodeId;
    }

    PageNode parent = manager.GetPageNode(parentPageNodeId);

    // Check whether exists
    var initialPageNode = manager.GetPageNodes().Where(n => n.Id == pageId).SingleOrDefault();

    if (initialPageNode != null)
    {
        return;
    }

    // Create the page
    pageData = manager.CreatePageData(pageDataId);
    pageData.HtmlTitle = pageName;
    pageData.Title = pageName;
    pageData.Description = pageName;
    pageData.Culture = Thread.CurrentThread.CurrentCulture.ToString();
    pageData.UiCulture = Thread.CurrentThread.CurrentUICulture.ToString();

    pageNode = manager.CreatePage(parent, pageId, NodeType.Standard);
    pageNode.Page = pageData;
    pageNode.Name = pageName;
    pageNode.Description = pageName;
    pageNode.Title = pageName;
    pageNode.UrlName = Regex.Replace(pageName.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");
    pageNode.ShowInNavigation = true;
    pageNode.DateCreated = DateTime.UtcNow;
    pageNode.LastModified = DateTime.UtcNow;

    // Check whether home page
    if (isHomePage)
    {
        SystemManager.CurrentContext.CurrentSite.SetHomePage(pageId);
    }

    manager.SaveChanges();

    // Publish
    var bag = new Dictionary<string, string>();
    bag.Add("ContentType", typeof(PageNode).FullName);
    WorkflowManager.MessageWorkflow(pageId, typeof(PageNode), null, "Publish", false, bag);
}

这将创建一个常规页面。我已经尝试将NodeType从standard更改为NodeType.Group,并保持代码的其余部分不变。但是,如果当前页面不是标准页面,则会引发异常。我已查找pageNode属性,以使页面成为组页面而不是常规页面,但找不到任何属性。如果有人知道如何执行此操作,我将不胜感激。

可能会引发异常,因为您正在尝试为创建的组节点创建PageData。我认为组节点没有页面数据,而是仅用于对其他页面节点进行组

尝试删除pageData对PageGroup.Page属性的创建和分配,这将允许您保存创建的页面节点

另外,如果您安装了,resources文件夹中有一个SampleUtilities类,它有许多用于创建页面、模板等的帮助器方法,可以作为使用API的一个很好的参考点


我希望这是有帮助的

以下代码可能会帮助您:

// Define our new view
        var templateIconView = new TemplateIconView { ID = TemplateIconViewControlId };

        var pageManager = PageManager.GetManager();
        pageManager.Provider.SuppressSecurityChecks = true;

        // Get the root
        var parentNode = pageManager.GetPageNode(SiteInitializer.SitefinityNodeId);

        // Check whether exists
        var initialPageNode = pageManager.GetPageNodes().SingleOrDefault(n => n.Id == AdditionalToolsPageId);
        if (initialPageNode != null) {

            pageManager.Delete(initialPageNode);
            pageManager.SaveChanges();

        }

        var homePageNode = pageManager.GetPageNodes().SingleOrDefault(n => n.Id == HomePageId);
        if (homePageNode != null) {

            pageManager.Delete(homePageNode);
            pageManager.SaveChanges();
        }

        // Create the Group Page Node
        var groupPageNode = pageManager.CreatePage(parentNode, AdditionalToolsPageId, NodeType.Group);
        groupPageNode.Name = "KonstruiTools";
        groupPageNode.Description.SetString("Konstrui Tools", true);
        groupPageNode.Title.SetString("Konstrui Tools", true);
        groupPageNode.UrlName = Regex.Replace("Konstrui Tools", @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-").ToLower();
        groupPageNode.ShowInNavigation = true;
        groupPageNode.DateCreated = DateTime.UtcNow;
        groupPageNode.LastModified = DateTime.UtcNow;

        pageManager.SaveChanges();

        // Create the actual page PageData
        var pageData = pageManager.CreatePageData(HomePageId);
        pageData.HtmlTitle = "Configure Template Icons";
        pageData.Title = "Configure Template Icons";
        pageData.Description = "Configure Template Icons";
        pageData.Culture = Thread.CurrentThread.CurrentCulture.ToString();
        pageData.UiCulture = Thread.CurrentThread.CurrentUICulture.ToString();
        pageData.EnableViewState = true;
        pageData.EnableViewStateMac = true;

        // Add our control to the page with default permissions
        var control = pageManager.CreateControl<PageControl>(templateIconView, Constants.VALUE_DEFAULT_BACKEND_PLACEHOLDER);
        pageManager.SetControlDefaultPermissions(control);
        pageData.Controls.Add(control);

        // Assign the Default Backend Template
        pageData.Template = pageManager.GetTemplate(SiteInitializer.DefaultBackendTemplateId);

        // Create the actual page PageNode
        var pageNode = pageManager.CreatePage(groupPageNode, HomePageId, NodeType.Standard);
        pageNode.Page = pageData;
        pageNode.Name = "ConfigureTemplateIcons";
        pageNode.Description = "Configure Template Icons";
        pageNode.Title = "Configure Template Icons";
        pageNode.UrlName = Regex.Replace("Configure Template Icons", @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-").ToLower();
        pageNode.ShowInNavigation = true;
        pageNode.DateCreated = DateTime.UtcNow;
        pageNode.LastModified = DateTime.UtcNow;
        pageNode.RenderAsLink = true;

        pageManager.SaveChanges();

        // Publish
        var bag = new Dictionary<string, string>();
        bag.Add("ContentType", typeof(PageNode).FullName);
        WorkflowManager.MessageWorkflow(HomePageId, typeof(PageNode), null, "Publish", false, bag);


        pageManager.Provider.SuppressSecurityChecks = false;

这将在rootlevel的后端中创建一个grouppage,其中包含另一个带有控件的页面。

下面是我最后要做的。它将在另一个组页面下创建一个组页面,这正是我的需求所需要的

                var pageId = Guid.NewGuid();

                PageManager manager = PageManager.GetManager();

                PageNode pageNode = null;

                //Find the modules section which will serve as the 
                //parent page.
                string pageTitle = ConfigurationManager.AppSettings["ModulesSection"].ToString();

                //Gets the actual Modules page.
                var modulesNode = SitefinityHelper.GetPageNode(pageTitle);

                if (modulesNode.Id == Guid.Empty)
                {
                    modulesNode.Id = SiteInitializer.CurrentFrontendRootNodeId;
                }

                PageNode modulesPage = manager.GetPageNode(modulesNode.Id);

                // Check whether exists
                var initialPageNode = manager.GetPageNodes().Where(n => n.Id ==     
                pageId).SingleOrDefault();

                if (initialPageNode != null)
                {
                    return false;
                }

                //Creates the page under the Modules section as a Group Page.
                pageNode = manager.CreatePage(modulesPage, pageId, NodeType.Group);

                pageNode.Name = newModule.Name;
                pageNode.Description = newModule.Description;
                pageNode.Title = newModule.Name;
                pageNode.UrlName = Regex.Replace(newModule.Name.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");
                pageNode.ShowInNavigation = true;
                pageNode.DateCreated = DateTime.UtcNow;
                pageNode.LastModified = DateTime.UtcNow;
                manager.SaveChanges();e here

您可以使用fluent API创建组页面。这是用fluentapi给出的简单方法

App.WorkWith()
    .Page()
    .CreateNewPageGroup()
    .Do(x => x.Title = "Testpage2")
    .Do(x => x.Name = "Testpage2")
    .Do(x => x.UrlName = "testpage2")
    .SaveChanges();

你的额外工具SPAGEID来自哪里?我能把它贴出来吗?没关系,我能找到我需要的东西。谢谢你的帖子,它确实引导我找到了解决方案。