Custom URL Formats for Sitefinity Hierarchical Dynamic Modules

Custom URL Formats for Sitefinity Hierarchical Dynamic Modules

April 29, 2013 0 Comments

The content you're reading is getting on in years
This post is on the older side and its content may be out of date.
Be sure to visit our blogs homepage for our latest news, updates and information.

The following blog post is based on Slavo Ingilizov's blog post connected to custom URL formats for Sitefinity Content Modules. All hierarchical dynamic items in the Sitefinity CMS have URLs that are generated automatically from a given format. The default format includes the parent module item's name in the URL generated by hierarchical dynamic modules and item's title. The URL format of the hierarchical dynamic modules is configurable and this article explains how you can modify it.

The default structure of the hierarchical module items when one of them is opened in a browser is the following:


<---Page URL---><--Parent module item's URL--><--Item's URL name-->

Because there are two dynamic types in this case (Parent module and Child module), we can’t know if it specifies the URL of the parent module or the URL of the child module item. There is still a way to change the format in this case, but it involves some programming.

To remove the name of the parent module from the structure of the URL you need to create a custom provider and override a couple of methods. Please review the code below:
public class CustomProvider : Telerik.Sitefinity.DynamicModules.Data.OpenAccessDynamicModuleProvider
      int temp = 0;
      public override string GetUrlFormat(Telerik.Sitefinity.GenericContent.Model.ILocatable item)
          var resolvedItem = (DynamicContent)item;
          Type typeChild = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.TestModule1.Testmodule2");
          Type typeParent = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.TestModule1.Testmodule1");
          var type = resolvedItem.GetType();
          if (typeChild == type)
              temp = 1;
              return "/[UrlName]";
          if( temp > 0 )
              if (typeParent == type)
              resolvedItem.SystemUrl = "";
              return "";
          return "/[UrlName]";

The newly created class should inherit from: Telerik.Sitefinity.DynamicModules.Data.OpenAccessDynamicModuleProvider.
You need to override the GetUrlFormat method, which actually returns the format string and use the logic above in order to remove the parent name from the URL. You could return a different value in the code above, for example a value from a custom field that you have created for your custom provider.

The code will work for all of your new items, which are created in the new custom provider.

To use your new provider, you need to register it in Sitefinity. To do this, follow these steps below:

  1. Go to Administration –> Settings –> Advanced
  2. In the TreeView, open DynamicModules –> Providers.
  3. Click “Create New”
  4. Specify a Name and Title for your custom provider.
  5. For ProviderType, enter the full namespace and type of the custom class you previously created. 
  6. Restart the application
To create a new item, go to your custom provider section in your dynamic module and click the Create new button.

Please make sure that the URL which does not have a parent name in the structure is unique.

The Progress Team

View all posts from The Progress Team on the Progress blog. Connect with us about all things application development and deployment, data integration and digital business.

Comments are disabled in preview mode.
Latest Stories
in Your Inbox

Subscribe to get all the news, info and tutorials you need to build better business apps and sites

More From Progress
ProgressNEXT: Premier Event for Modern Application Development
Read More
Seven Reasons to Check Out Sitefinity 11.1
Read More
Getting Started with Your Omnichannel Content Strategy
Read More