Hooks is a simple way to change, or extend the default behaviour of Piranha CMS. Hooks can either extend the default behaviour or replace a behaviour depending on the hook. Hooks should be added in the Configure method in your application startup after Piranha.App has been initialized.
App.Hooks.OnGenerateSitemap += (sitemap) =>
{
// Add custom items to the sitemap before rendering Sitemap.xml
}
This hook extends the built in Sitemap generation and can be used for adding custom entries, when you for example have pages in your site that is not controlled by Piranha CMS.
App.Hooks.OnGenerateSlug += (str) =>
{
var slug = "";
// Generate custom slug from input string
return slug;
}
This hook replaces the default slug generation and can be used when you for example want to support different charsets than the default slug generation. It is executed when a model with a slug (page, post, category & tag) is added and updated.
The following hooks are available when accessing aliases through the AliasService. All of these hooks can be used to extend the default behaviour of the service layer.
App.Hooks.Alias.RegisterOnLoad((alias) => { ... });
App.Hooks.Alias.RegisterOnBeforeSave((alias) => { ... });
App.Hooks.Alias.RegisterOnAfterSave((alias) => { ... });
App.Hooks.Alias.RegisterOnBeforeDelete((alias) => { ... });
App.Hooks.Alias.RegisterOnAfterDelete((alias) => { ... });
The following hooks are available when accessing comments through the PageService or PostService. All of these hooks can be used to extend the default behaviour of the service layer. Please note that the same hooks will be called regardless of what content the comment is related to.
App.Hooks.Comments.RegisterOnLoad((comment) => { ... });
App.Hooks.Comments.RegisterOnBeforeSave((comment) => { ... });
App.Hooks.Comments.RegisterOnAfterSave((comment) => { ... });
App.Hooks.Comments.RegisterOnBeforeDelete((comment) => { ... });
App.Hooks.Comments.RegisterOnAfterDelete((comment) => { ... });
App.Hooks.Comments.RegisterOnValidate((comment) => { ... });
The following hooks are available when accessing media assets through the MediaService. All of these hooks can be used to extend the default behaviour of the service layer.
App.Hooks.Media.RegisterOnLoad((media) => { ... });
App.Hooks.Media.RegisterOnBeforeSave((media) => { ... });
App.Hooks.Media.RegisterOnAfterSave((media) => { ... });
App.Hooks.Media.RegisterOnBeforeDelete((media) => { ... });
App.Hooks.Media.RegisterOnAfterDelete((media) => { ... });
The following hooks are available when accessing folders through the MediaService. All of these hooks can be used to extend the default behaviour of the service layer.
App.Hooks.MediaFolder.RegisterOnLoad((folder) => { ... });
App.Hooks.MediaFolder.RegisterOnBeforeSave((folder) => { ... });
App.Hooks.MediaFolder.RegisterOnAfterSave((folder) => { ... });
App.Hooks.MediaFolder.RegisterOnBeforeDelete((folder) => { ... });
App.Hooks.MediaFolder.RegisterOnAfterDelete((folder) => { ... });
The following hooks are available when accessing pages through the PageService. Please note that all models are passed in as Piranha.Models.PageBase and must be casted to the applicable type.
App.Hooks.Pages.RegisterOnLoad((page) => { ... });
App.Hooks.Pages.RegisterOnBeforeSave((page) => { ... });
App.Hooks.Pages.RegisterOnAfterSave((page) => { ... });
App.Hooks.Pages.RegisterOnBeforeDelete((page) => { ... });
App.Hooks.Pages.RegisterOnAfterDelete((page) => { ... });
The following hooks are available when accessing params through the ParamService. All of these hooks can be used to extend the default behaviour of the service layer.
App.Hooks.Param.RegisterOnLoad((param) => { ... });
App.Hooks.Param.RegisterOnBeforeSave((param) => { ... });
App.Hooks.Param.RegisterOnAfterSave((param) => { ... });
App.Hooks.Param.RegisterOnBeforeDelete((param) => { ... });
App.Hooks.Param.RegisterOnAfterDelete((param) => { ... });
The following hooks are available when accessing posts through the PostService. Please note that all models are passed in as Piranha.Models.PostBase and must be casted to the applicable type.
App.Hooks.Post.RegisterOnLoad((post) => { ... });
App.Hooks.Post.RegisterOnBeforeSave((post) => { ... });
App.Hooks.Post.RegisterOnAfterSave((post) => { ... });
App.Hooks.Post.RegisterOnBeforeDelete((post) => { ... });
App.Hooks.Post.RegisterOnAfterDelete((post) => { ... });
The following hooks are available when accessing sites through the SiteService. All of these hooks can be used to extend the default behaviour of the service layer.
App.Hooks.Site.RegisterOnLoad((site) => { ... });
App.Hooks.Site.RegisterOnBeforeSave((site) => { ... });
App.Hooks.Site.RegisterOnAfterSave((site) => { ... });
App.Hooks.Site.RegisterOnBeforeDelete((site) => { ... });
App.Hooks.Site.RegisterOnAfterDelete((site) => { ... });
The following hooks are available when accessing site content through the SiteService. Please note that all models are passed in as Piranha.Models.SiteContentBase and must be casted to the applicable type.
App.Hooks.SiteContent.RegisterOnLoad((siteContent) => { ... });
App.Hooks.SiteContent.RegisterOnBeforeSave((siteContent) => { ... });
App.Hooks.SiteContent.RegisterOnAfterSave((siteContent) => { ... });
App.Hooks.SiteContent.RegisterOnBeforeDelete((siteContent) => { ... });
App.Hooks.SiteContent.RegisterOnAfterDelete((siteContent) => { ... });