This year we had the opportunity to work with in a new initiative to create a marketplace where developers and partners can use different add-ons to improve the experience for clients. The first step to be considered as part of this marketplace was to have great ideas that can help the community. In this post we are going to explain how we came up with some of them and how it helped our clients.
When you decide to create a new add-on, you will first have to check if something has been done already, check if the plugin can be improved or it is better to start from scratch. Ideas for add-ons usually appear while you are developing a project for a client with an important set of requirements. In our case the first add-on that we identified was a redirect manager.
community already has a similar module for this task. We’ve been using their plugin for several projects, but when a client appeared with 60k redirects, the plugin was not able to handle it anymore.
After importing the 60k redirects using a xml file, a process which took around 30 minutes to finish, the editor interface was becoming unresponsive every time we tried to do something in the redirect plugin dashboard gadget. Even worse, the website itself was getting slower and slower to the point that was not usable by the users of our client. Another issue we found was that if you enable the logging functionality that the plugin provides, with this number of redirects, it was consuming so much resources that it collapsed our servers. The main reason for this huge performance bottleneck was that the plugin was using DDS to save and recover the redirects. Unfortunately, it is not a good idea when you have so many redirects. Finally, the last issue we found, which was causing headaches for our client, was that the plugin only allowed us to import redirects using xml files and they wanted to use csv files instead which are easier to use and edit in Excel.
With all those compromises in place, we took the decision to create a new redirect manager plugin from scratch which does not use DDS, but custom tables instead. This improved the performanceright away, the 60k redirects where imported in less than a minuteusing a csv file, and the plugin in the administration interface did not collapsewhileshowing or manipulating any of them.The plugin allows us to create 301 and 302 redirects, search any redirect fast and easy, it supports regular expressions, relative URLs and multiple sites. The plugin is called Enhanced redirect manager by Verndale and is free to use
In the end, with this new plugin, we were able to provide a fast, reliable solution to our client specific demands which helped us to keep a healthy long relationship with them.
Another idea for a plugin came up while we were reviewing a client requirement related with content approval processes for their product reviews which were generated by their users. We realized that the out of the box functionality for content approvals in was not versatile enough for our client. The current functionality only lets you create approval workflows based on the tree structure of your site. For instance, if you want a set of pages or blocks to have an approval workflow in place, you must set a content approval sequence in an upper node which contains the pages.
In the image above, if you set the content approval sequence in the Alloy track page, all pages below will inherit the same approval sequence unless you specify otherwise. To change the default behavior in your child pages you can change the radio button to enable and specify your own set of steps for that specific child page.
The content approval sequence can have one or more steps and each step can be accepted or rejected by several users or roles.
A similar logic applies to blocks, you must set the content approval sequence in the folder which contains the blocks you want them to have an approval sequence. You cannot set content approval sequences to blocks directly as you do to pages.
This functionality usually is enough for most projects, but in some cases, we do not want to adapt the site structure just to get the content approval sequences in place. What if we want to have page types or blocks folders which should have the same content approval sequence, but they may not be residing inside a root node? Unfortunately, with the current functionality, we cannot reuse content approval sequences, we must always create a new one on a root node or modify it individually.
Taken all of this into account we decided to create a plugin which allowed us to have more versatility when we create content approval sequences. The plugin allows us to create reusable content approval workflows as DDS items, which can be assigned to page types or blocks folders. It also enhances the out of the box functionality, by letting a client user initialize the content approval workflow. For example, when a user wants to send a review about a product, and it must be reviewed by an editor before being published. It also keeps the functionality of several steps and users or roles reviewers per step. The add-on is called Flexible content approval plugin by Verndale
These are only two of the plugins that were created for the marketplace based on issues we had using other plugins or uncommon requirements from our clients. We developed 7 of them this year and all appeared as ideas following the same path. A requirement from our client showed us some of the limitations of a current plugin or from itself, we created the extra functionality as a plugin, and at the same time it allowed us to keep our clients happy.
If you are reading this post while interested on developing applications for theepi marketplace these might be the questions that you need to ask yourself:
- What have I done for a project recently that ended making us develop something that could be reused on other projects?
- How could this help other Episerver developers/projects to overcome common issues?
If you have strong answers for the questions above you might have a good idea for the marketplace, same as we did with the couple of ideas that we detailed here.
No model set
at Glass.Mapper.Sc.GlassHtml.MakeEditable[T](Expression`1 field, Expression`1 standardOutput, T model, Object parameters, Context context, Database database, TextWriter writer) in c:\TeamCity\buildAgent\work\8567e2ba106d3992\Source\Glass.Mapper.Sc\GlassHtml.cs:line 589