Features
Single Click
With a single click your Back Office will be organised!
Sensible (and Opinionated)
A "one size fits all" organiser for
- Data Types
- Document Types
- Media Types
- Member Types
Extensible
All "Organise Actions" can be extended and replaced.
Organise your Back Office just how you want it.
Versions
10.1.3
Version 10 Support Policy
Feature updates ended 16/06/2024
Security updates until 16/06/2025
This is a Long Term Support (LTS) version
13.1.3
Version 13 Support Policy
Feature updates until 14/12/2025
Security updates until 14/12/2026
This is a Long Term Support (LTS) version
14.1.8
Version 14 Support Policy
Feature updates ended 02/03/2025
Security updates until 30/05/2025
15.1.10
Version 15 Support Policy
Feature updates until 14/08/2025
Security updates until 14/11/2025
Readme
Quick Start
- Go to the backoffice
- Click
Settings
- Click
Organise
- Select the types you wish to organise
- Click submit and confirm
- Refresh your page and enjoy a cleaner backoffice ✨
Configuration
Add the following to your appsettings.json
file
"BackOfficeOrganiser": { "DataTypes": { "InternalFolderName": "Internal", "ThirdPartyFolderName": "Third Party", "CustomFolderName": "Custom" } }
Extending
You can implement your own Organise Action
, a method that determines where a type should be moved to. Implement the following interfaces:
Document Types
=>IContentTypeOrganiseAction
Media Types
=>IMediaTypeOrganiseAction
Member Types
=>IMemberTypeOrganiseAction
Data Types
=>IDataTypeOrganiseAction
Example
using jcdcdev.Umbraco.Core.Extensions;using Umbraco.Cms.Core.Models;using Umbraco.Cms.Core.Services;
namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
public class ExampleContentTypeOrganiseAction : IContentTypeOrganiseAction{ // Handle all but container types (Folders) public bool CanMove(IContentType contentType, IContentTypeService contentTypeService) => !contentType.IsContainer;
public void Move(IContentType contentType, IContentTypeService contentTypeService) { var folderId = -1; var folderName = string.Empty; var isComposition = contentTypeService.GetComposedOf(contentType.Id).Any();
if (contentType.AllowedTemplates?.Any() ?? false) { folderName = "Pages"; } else if (isComposition) { folderName = "Compositions"; } else if (contentType.IsElement) { folderName = "Element Types"; }
if (!folderName.IsNullOrWhiteSpace()) { folderId = contentTypeService.GetOrCreateFolder(folderName).Id; }
contentTypeService.Move(contentType, folderId); }}
public class Composer : IComposer{ public void Compose(IUmbracoBuilder builder) { // Make sure you register your action BEFORE the default! builder.ContentTypeOrganiseActions().Insert<ExampleContentTypeOrganiseAction>(); }}
Contributing
Contributions to this package are most welcome! Please visit the Contributing page.
Acknowledgements (Thanks)
- LottePitcher - opinionated-package-starter