Maintaining the HTML cache clearer

The HTML cache clearer does exactly what its name implies: it clears the Sitecore HTML caches.  More specifically, it clears Sitecore’s HTML caches upon observing a publish end event.  More specifically still, it clears the HTML cache of all websites that are registered with the HTML cache clearer upon observing a publish end event.  There are quite a few posts around about how performance of the HTML cache can be improved (*cough* John West *cough*), but one thing that people don’t seem to mention often is how annoying it is to maintain the configuration correctly.  This post outlines the method that I prefer to use, and it works pretty well for me so hopefully someone else will find it useful too. Continue reading

Inheriting website attributes and trimming your Sitecore configuration

Today I had the dubious pleasure of seeing a Sitecore solution containing several hundred microsites.  I spent a little while silently fuming at the developers for not using the inherits attribute, until it occurred to me that this attribute isn’t really documented anywhere.  I’m not going to attempt to do so fully; I’ll leave that job (along with the many other undocumented attributes) to the Sitecore documentation team.  I will provide a bit of detail on it, though, along with another option that would be a good alternative to the mass of duplicated configuration that I saw. Continue reading

Conditional Placeholder Settings

I’ve always considered the rules engine to be a pretty cool part of Sitecore. In this post, I’ll talk about using the Sitecore rules engine in order to affect Sitecore placeholder settings in the page editor (or experience editor as it’s soon to be called).  I’ve also put the code for this module (for want of a better word) as it stands in a GitHub repository.

A lot of people are familiar with the rules engine in the context of the personalisation functionality but don’t realise that, out of the box, it can be used for other things too. A few of the most useful (in my opinion) examples are: insert options, search index boosting, and tacking things on to various item events.  I’m not going to spend too much time on the basics of the rules engine, for that John West has a good list of posts, instead I’m just going to write a bit about how I went about writing the module. Continue reading

Using multiple button roots on a Sitecore edit frame

Edit frames are a well-known part of the Sitecore page editor: they allow developers to show buttons around arbitrary parts of the page.  Edit frames will take a single button root and then display all the buttons in that folder on a toolbar.  From someone who uses edit frames quite a bit, I always used to find it quite annoying that I would have to duplicate buttons if I wanted to have the same button on different edit frame toolbars.  After a bit of digging, I found a way to extend edit frames that would allow me to specify multiple button roots on each toolbar, allowing me to reuse groups of buttons. Continue reading

Allowing sublayouts to control their own HTML cache keys

I spoke to a fellow MVP recently, Kern Herskind Nightingale and the topic of my blog came up, along with the fact that I hadn’t (at the time) updated for a while.  The reason was my previous post about overriding rendering types. Originally, I had intended to use an example that would allow developers to add an interface to their sublayout classes and specify custom logic around building their cache keys. Continue reading

Sitecore Rendering Types

The topic of rendering types came up at the office the other day, and I wanted to write a quick post about them.  Rendering types are a group of classes that Sitecore uses to build up the controls on its pages using the presentation settings.  They handle the creation of the actual controls that Sitecore will use for rendering and allow for the Sitecore rendering engine to be extended.  You can use this mechanism to extend Sitecore by modifying how existing types of rendering work, or by adding your own custom rendering types.  This extension point can be useful for the times where you want to introduce functionality to Sitecore at a solution level; however I would typically recommend that you keep this to low-level functionality rather than high-level functionality, as your logic will be applied to every single rendering of your type in the solution, across all the websites. Continue reading

Custom Sitecore Pipelines

Pipelines are a very useful feature in Sitecore, one that I make use of a great deal.  I see a great many Sitecore website solutions that create their own processors to add to the existing pipelines (or which override existing pipeline processors), but I very rarely see solutions that have created their own pipelines. Usually I only see it in modules.  I think that developers might be missing a trick, as there are a great many things that you can do with a simple pipeline and it provides easy extensibility throughout the project lifetime.

Pipelines, to my mind, should be used to solve a problem where you have (or will have) discrete pieces of logic that may be added to at any time.  Often but not always, these operations occur in a particular order.  There will usually also be one or more results of the pipeline that all of the operations will contribute toward in some way. Continue reading

Dynamic Placeholders and IExpandable

There have been quite a few posts on the topic of ‘Dynamic Placeholders’ (among the most useful of which are those of John Newcombe, Nick Wesselman and Dave Leigh).  If you haven’t come across this topic, then I’d suggest checking out Nick Wesselman’s blog post for a pretty succinct explanation of it.  It boils down to the limitation that you cannot place multiple sublayouts containing a placeholder onto a page in such a way that the placeholders resolve to having the same fully qualified placeholder keys.  I really like John Newcombe’s approach, which is based on Nick Wesselman’s; and having spent quite a bit of time playing with it, I’d certainly suggest that anyone needing to solve this problem takes a look themselves.

I plan to tackle a slightly different problem in this post: that of dynamically creating a number of placeholders within a single sublayout (so dynamic placeholders instead of dynamic placeholder keys, although as we’ll see later, the two problems can be solved in a very similar manner). Continue reading

NVelocity: Sitecore’s original template engine

I sometimes wonder how many people look at the various dependencies that come with Sitecore.  One has to be slightly careful around how these are licensed, especially with Telerik, but I think that there’s one which deserves a mention: NVelocity.  NVelocity was originally a .Net port of the Java-based Velocity templating engine.  Sadly the project itself is more-or-less dead as far as I can tell; having been overtaken by more modern engines like Razor, but I still use it now and then. I thought that I’d explain the basics for people who hadn’t heard of it until now. Continue reading

Unit Testing Sitecore

Unit testing is a very popular topic, and is a very good practice to adopt.  Unfortunately, as anyone who has worked with it will know, some common Sitecore classes (Sitecore.Data.Items.Item to name one) can’t be mocked with some popular mocking frameworks, and can’t be directly instantiated.  So, the logical solution (to me) is to let your unit tests access the Sitecore API and databases (some others abstract the detail away, but as the saying goes: “Who guards the guards?”).  There have been quite a few different blog articles written about this topic, and people have approached the problem differently. So I thought that I’d share my approach to writing unit tests for Sitecore solutions. Continue reading

Sitecore Patch Files

As anyone familiar with Sitecore’s guide of recommended practices, changing the <sitecore> section of the Web.config file directly is frowned upon.  Rather, developers should use things called Sitecore configuration include files, or patch files.  By default, these are stored in the /App_Config/Includes folder of the website.

There are plenty of blog articles about them on the internet, however there was one specific feature that seems to be relatively unknown: the set namespace. Continue reading

Setting Sitecore ImageField

Update: this post uses an older version of the Sitecore API. For an up-to-date solution, please see this updated article.

Recently I had to write something to allow users to upload their own content on a Sitecore site. Not an unusual, or especially difficult, piece of functionality but one thing that did give me a bit of trouble was associating uploaded images (in the media library) with the Sitecore item’s image field. Continue reading

Quick Update

So, I thought I’d ease into what will (hopefully) be another flurry of posting activity with a quick update on what’s been going on here recently.  If you’ve read through earlier posts on this blog then you may well know that I started working at bit10 in September 2007.  I’ve had a fantastic time working at bit10; I’ve learned a great deal and met many people with whom I’m hoping to keep in contact.  However, as with all things, I think that it’s become time to move on. Continue reading

Back on the ‘Net

After almost a month I’m finally back on the internet.  I’ve got a lot of catching up to do, I might finally get back to posting at some point soon.

Right now I’ve got a fair bit on my plate as I’m currently following up a couple of issues with my new place with the lettings agent which are dragging along somewhat, but not to the point where I want to go into details on here at the moment.