Программное создание групповой страницы Sitefinity Backend

Я искал и не могу найти документацию о том, как создать групповую страницу в API sitefinity. Я знаю, как создать страницу программно.

    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 со стандартного на NodeType.Group и оставить остальную часть кода как есть. Однако это вызывает исключение «Текущая страница не является стандартной страницей». Я искал свойства pageNode, чтобы сделать страницу страницей группы, а не обычной страницей, но я не могу их найти. Если кто-нибудь знает, как это сделать, я был бы очень признателен.


person zic10    schedule 24.02.2014    source источник


Ответы (4)


исключение, вероятно, вызвано тем, что вы пытаетесь создать PageData для созданного узла Group. Я считаю, что узлы группы не имеют данных страницы, а служат только для группировки других узлов страницы.

попробуйте удалить создание и назначение pageData свойству PageGroup.Page, и это должно позволить вам сохранить созданный узел страницы.

Кроме того, если вы устанавливаете SDK sitefinity, в папке ресурсов есть класс SampleUtilities. который имеет множество вспомогательных методов для создания страниц, шаблонов и т. д., который служит отличным ориентиром для работы с API.

Я надеюсь, что это полезно!

person SelAromDotNet    schedule 25.02.2014

Это некоторый код, который может вам помочь:

// 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;

Это создает групповую страницу внутри бэкенда на корневом уровне, которая содержит другую страницу с элементом управления.

person Daniel Plomp    schedule 25.02.2014
comment
Откуда берется ваш AdditionalToolsPageId? Может быть, это опубликовать? - person zic10; 26.02.2014
comment
Неважно, я смог понять, что мне нужно. Спасибо за ваш пост, он подтолкнул меня к решению. - person zic10; 26.02.2014

Вот что я в итоге сделал. Он создаст групповую страницу под другой групповой страницей, что мне и нужно для моих требований.

                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
person zic10    schedule 26.02.2014

Вы можете создать групповую страницу, используя свободный API. Это простой способ, предоставляемый в свободном API

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