I'm slightly OCD when it comes to organising my settings in Orchard, of which I seem to have a vast amount. And luckily, Orchard has a nifty way of doing this for you and it is beautifully simple to implement.
So to start with you are going to need to have some site settings, which I have covered in this post. Once you have built your site setting, you are going to need to create a menu item that will be displayed in an expandable list under the Settings menu item in the Orchard dashboard, which will be done in the handler.
public class UniTownSiteSettingsPartHandler : ContentHandler { public UniTownSiteSettingsPartHandler(IRepository<UniTownSiteSettingsPartRecord> repository) { Filters.Add(StorageFilter.For(repository)); Filters.Add(new ActivatingFilter<UniTownSiteSettingsPart>("Site")); T = NullLocalizer.Instance; } public Localizer T { get; set; } protected override void GetItemMetadata(GetContentItemMetadataContext context) { if (context.ContentItem.ContentType != "Site") return; base.GetItemMetadata(context); context.Metadata.EditorGroupInfo.Add(new GroupInfo(T("Statistics"))); } }
The important method here is GetItemMetadata, which I have used to add a new group "Statistics. Next you need to actually place your site settings into that group via the Editor method in your driver.
protected override DriverResult Editor(UniTownSiteSettingsPart part, dynamic shapeHelper) { return ContentShape("Parts_UniTownSiteSettingsPart", () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: part, Prefix: Prefix)) .OnGroup("Statistics"); }
So all we are doing is appending .OnGroup("Statistics") to our return statement. Simple!