Skip to content
Simonas Mikulenas edited this page Jul 30, 2013 · 24 revisions

This documentation page is created to let you understand the way of how to interact with Better CMS - to get data and / or to be notified on particular events.

How to access CMS data?

To catch the main idea how to get some data from the Better CMS, check out the example.

Note: do not forget to wrap API code in using, because context object must be disposed after it was used:

using BetterCms.Module.Api;
using BetterCms.Module.Api.Infrastructure;
using BetterCms.Module.Api.Infrastructure.Enums;
using BetterCms.Module.Api.Operations.Pages.Widgets;
[...]
using (var api = ApiFactory.Create())
{
    var requestModel = new GetWidgetsModel();
    requestModel.Take = 5; // Retrieves 5 items
    requestModel.Skip = 3; // Skips 3 items

    requestModel.Order.Add("Name"); // Sorts by name ascending
    requestModel.Order.Add("CreatedOn", OrderDirection.Desc); // Then sorts by date descending

    requestModel.Filter.Connector = FilterConnector.And; // Filtering connector (optional, default value = FilterConnector.And)
    requestModel.Filter.Add("Name", "A", FilterOperation.StartsWith); // Filters by name: item should start with "A"
    requestModel.Filter.Add("Name", "B", FilterOperation.EndsWith); // Filters by name: item should start with "B"

    var innerFilter = new DataFilter(FilterConnector.Or); // Create inner filter
    innerFilter.Add("CreatedBy", "Name.Surname.1");
    innerFilter.Add("CreatedBy", "Name.Surname.2");
    requestModel.Filter.Inner.Add(innerFilter); // Add inner filter to filters list

    var request = new GetWidgetsRequest { Data = requestModel }; // Create request

    var widgets = api.Pages.Widgets.Get(request); // Execute query
}
[...]

So, the main idea is to create the API context and use the methods it provides.

Tip: Do not forget to dispose API instance after using (best way to accomplish this is to wrap all the API code within using).

How to get notifications on CMS actions?

If you would like to be notified on some Better CMS actions - let's say when a page is created, check out the bellow:

[...]
using BetterCms.Core;
using BetterCms.Core.Environment.Host;
using BetterCms.Events;

public class MvcApplication : HttpApplication
{
    private static ICmsHost cmsHost;
    protected void Application_Start()
    {
        cmsHost = CmsContext.RegisterHost(); 
        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        cmsHost.OnApplicationStart(this); 

        // Attach to the page creation event.
        BetterCms.Events.PageEvents.Instance.PageCreated += Instance_PageCreated;
    }

    // Get notified when page is created.
    void Instance_PageCreated(SingleItemEventArgs<Module.Pages.Models.PageProperties> args)
    {
        // TODO: do what ever is necessary!
    }
[...]

What events are built in Better CMS?

Events from main modules are described bellow.

  • BetterCms.Core:
    • BetterCms.Events.CoreEvents.HostStart
    • BetterCms.Events.CoreEvents.HostStop
    • BetterCms.Events.CoreEvents.HostError
    • BetterCms.Events.CoreEvents.HostAuthenticateRequest
  • BetterCms.Module.Root:
    • BetterCms.Events.RootEvents.PageRendering
    • BetterCms.Events.RootEvents.PageRetrieved
    • BetterCms.Events.RootEvents.CategoryCreated
    • BetterCms.Events.RootEvents.CategoryUpdated
    • BetterCms.Events.RootEvents.CategoryDeleted
    • BetterCms.Events.RootEvents.TagCreated
    • BetterCms.Events.RootEvents.TagUpdated
    • BetterCms.Events.RootEvents.TagDeleted
  • BetterCms.Module.Pages:
    • BetterCms.Events.PageEvents.PageCreated
    • BetterCms.Events.PageEvents.PageDeleted
    • BetterCms.Events.PageEvents.PageCloned
    • BetterCms.Events.PageEvents.PagePropertiesChanged
    • BetterCms.Events.PageEvents.PagePublishStatusChanged
    • BetterCms.Events.PageEvents.PageSeoStatusChanged
    • BetterCms.Events.PageEvents.PageContentInserted
    • BetterCms.Events.PageEvents.RedirectCreated
    • BetterCms.Events.PageEvents.RedirectUpdated
    • BetterCms.Events.PageEvents.RedirectDeleted
    • BetterCms.Events.PageEvents.WidgetCreated
    • BetterCms.Events.PageEvents.WidgetUpdated
    • BetterCms.Events.PageEvents.WidgetDeleted
  • BetterCms.Module.Blog:
    • BetterCms.Events.BlogEvents.BlogCreated
    • BetterCms.Events.BlogEvents.BlogUpdated
    • BetterCms.Events.BlogEvents.BlogDeleted
    • BetterCms.Events.BlogEvents.AuthorCreated
    • BetterCms.Events.BlogEvents.AuthorUpdated
    • BetterCms.Events.BlogEvents.AuthorDeleted
  • BetterCms.Module.MediaManager:
    • BetterCms.Events.MediaManagerEvents.MediaFileUploaded
    • BetterCms.Events.MediaManagerEvents.MediaFileUpdated
    • BetterCms.Events.MediaManagerEvents.MediaFileDeleted
    • BetterCms.Events.MediaManagerEvents.MediaFolderCreated
    • BetterCms.Events.MediaManagerEvents.MediaFolderUpdated
    • BetterCms.Events.MediaManagerEvents.MediaFolderDeleted
    • BetterCms.Events.MediaManagerEvents.MediaArchived
    • BetterCms.Events.MediaManagerEvents.MediaUnarchived
  • BetterCms.Module.Newsletter:
    • BetterCms.Events.NewsletterEvents.SubscriberCreated
    • BetterCms.Events.NewsletterEvents.SubscriberUpdated
    • BetterCms.Events.NewsletterEvents.SubscriberDeleted

Clone this wiki locally