I thought that I would mention a small improvement that was released with CMS 8 the other day. It’s a minor change in regards to comparisons of ContentReference instances, but as this is an area that is used a lot I thought that it would be worth mentioning. Read the rest of this entry »

Search engines often highlights the importance of using canonical URLs to signify the preferred URL that should be used when the same content can be reached using multiple URLs.

And while EPiServer has always supported the use of canonical URLs it is now easier than ever to setup multiple domains and ensure that there is only one canonical content URL from a search engine perspective. This includes adding canonical link elements to the HTML head of your pages and redirecting requests to your primary domain.

Read the rest of this entry »

When we took a look at what performance improvements that we could make to the EPiServer CMS platform there was one thing that stood out like a sore thumb, namely the PropertyDataCollection.

The main problem was how it’s base class, NameObjectCollectionBase, was handling retrieval of items in the collection in a multi-threaded scenario. As it happens to be, this scenario is one of the most commonly used on an EPiServer CMS site, since this is performed every time a content property is accessed. When profiling sites this often ended up as one of the code paths where most of the time was spent, in the case of some of the pages on the Alloy example site it turned out to be almost 20% of the total time spent rendering the page.

Read the rest of this entry »

For as long as I can remember, the logging framework of choice for EPiServer has been log4net, but this is about to change now! Well, I say that, in reality we are only changing the way we are using the logging framework so that it is possible to change framework going forward. The main reason for this change being that it allows us to upgrade log4net to the latest version, something that was not previously possible due to an earlier change of the log4net strong name key without causing major problems.

The new Logging API that is shipping with EPiServer.Framework since version 7.17.0 is not meant to compete or be a replacement for existing logging frameworks such as log4net, but merely a simple abstraction for writing messages to a logging framework. To manage the configuration and output of the logger, simply use the API of the implementing framework of your choice.

Read the rest of this entry »

Many of you have seen how some of the EPiServer modules are being deployed as compressed ZIP packages and have asked if you can do the same with your own modules. To cater for these requests we added a virtual path provider with support for ZIP files to the EPiServer.Framework package called ZipArchiveVirtualPathProvider. This addition was released as a part of version 7.15.0.
Read the rest of this entry »

With EPiServer 7 came the introduction of two new features; the ability to divide a page into blocks or smaller reusable components and support for the ASP.NET MVC framework in templates.

If we want to combine these two features together and create a custom form placed in an MVC block template, there are a few things that we need to solve to get a properly working solution and this is what we will explore in this post.
Read the rest of this entry »

One of the things that I’m always aiming for when creating a module for EPiServer is that you should be able to install it simply by dropping a single assembly to the bin folder. There should be no or very little configuration needed (Convention over Configuration!)  and you shouldn’t have to place files in folders here and there.

The first and probably most important step towards this goal was introduced to the wider EPiServer audience by Dan, Johan and Allan quite a while back ago, where they showed how to reference embedded .aspx files using a virtual path provider.

At Intergen were I currently work we are using this technique frequently and as of late we also introduced a standard way to embed EPiServer language files within these module assemblies, the MetaPropertyModifier that I wrote about the other week is built with embedded language files. The key requirements that we set up for this was that it should still be possible to add more languages later and also possible to override strings in the included languages.

Read the rest of this entry »