Skip to content

Instantly share code, notes, and snippets.

@milannankov
Last active October 20, 2016 13:35
Show Gist options
  • Save milannankov/de8491344dd51a2ae3740e59f38f3488 to your computer and use it in GitHub Desktop.
Save milannankov/de8491344dd51a2ae3740e59f38f3488 to your computer and use it in GitHub Desktop.
How To Add MVC Widget To A Page Using Sitefinity API
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