Last active
October 20, 2016 13:35
-
-
Save milannankov/de8491344dd51a2ae3740e59f38f3488 to your computer and use it in GitHub Desktop.
How To Add MVC Widget To A Page Using Sitefinity API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Global : System.Web.HttpApplication | |
{ | |
protected void Application_Start(object sender, EventArgs e) | |
{ | |
Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped; | |
} | |
private void Bootstrapper_Bootstrapped(object sender, EventArgs e) | |
{ | |
this.AddMvcWidgetToPage(); | |
} | |
private void AddMvcWidgetToPage() | |
{ | |
var manager = PageManager.GetManager(); | |
manager.Provider.SuppressSecurityChecks = true; | |
// 1) Find the page and start editing it | |
var pageNode = this.GetPageNodeByName("MyPage"); | |
var pageToEdit = manager.EditPage(pageNode.GetPageData().Id, CultureInfo.CurrentUICulture); | |
// 2) Create widget | |
var widget = CreateMVCScriptWidget(); | |
// 3) Add widget to a placeholder on page | |
var placeholderId = this.GetFirstPlaceholderOnPage(pageNode); | |
var widgetControl = manager.CreateControl<PageDraftControl>(widget, placeholderId); | |
widgetControl.Caption = "My Script"; | |
pageToEdit.Controls.Add(widgetControl); | |
// 4) Publish and save changes | |
manager.PublishPageDraft(pageToEdit, CultureInfo.CurrentUICulture); | |
manager.SaveChanges(); | |
} | |
private PageNode GetPageNodeByName(string name) | |
{ | |
var manager = PageManager.GetManager(); | |
return manager.GetPageNodes() | |
.ToList() | |
.Where(p => p.Title == name) | |
.FirstOrDefault(); | |
} | |
private static MvcControllerProxy CreateMVCScriptWidget() | |
{ | |
var controller = new JavaScriptController(); | |
controller.Model.Mode = ResourceMode.Inline; | |
controller.Model.Position = EmbedPosition.BeforeBodyEndTag; | |
controller.Model.InlineCode = "alert('Hello, Sitefinity.');"; | |
var mvcWidget = new MvcControllerProxy(); | |
mvcWidget.ControllerName = controller.GetType().FullName; | |
mvcWidget.Settings = new ControllerSettings(controller); | |
return mvcWidget; | |
} | |
private string GetFirstPlaceholderOnPage(PageNode pageNode) | |
{ | |
return pageNode | |
.GetPageData() | |
.Controls.First() | |
.PlaceHolders.First(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment