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.

Read the rest of this entry

, ,

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.

Read the rest of this entry

, , ,

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.

Read the rest of this entry

, ,

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.

Read the rest of this entry

,

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).

Read the rest of this entry

, ,

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.

Read the rest of this entry

, ,

A couple of years ago, I wrote a post on how to assign a Sitecore image media item to an image field using the Sitecore 5.3 API.  As it stands, I haven’t really had need to do this since, but I got asked about it the other day by someone at the office.  So, I thought I’d post a little update to the original article.

Read the rest of this entry

, ,

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.

Read the rest of this entry

, , ,

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.

Read the rest of this entry

, , , ,

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.

Read the rest of this entry

, , ,

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.

Read the rest of this entry

, ,

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.

House Move

In case anyone’s been wondering why I’ve been a bit quiet recently, it’s just because I’ve moved house and haven’t managed to get internet sorted at my new place yet.  Once I get myself back online, I should be able to resume normal posting.  When that’s going to be depends on the irritatingly recalcitrant BT.

Overactive Akismet

I’ve always really ignored the comment moderation queue, generally trusting Akismet to filter out the spam and only let real comments through.  I’ve actually been very pleased with it as it has stopped comment spam coming through, which was initially quite a nuisance.  This evening though (as I currently can’t get to sleep) I decided to have a look through the comments that Akismet has marked as spam.

Read the rest of this entry

I’ll admit straight up that I haven’t really used IE8.  I’ll also happily concede that IE8 is probably a good deal better at rendering standards-compliant things than IE6 and IE7.  I’m also happy that with the release of IE8, the death of IE6 is that little bit closer (something that will make any web developer happy, I believe).  I have to say, though, that I was highly disappointed by Microsoft when they released this article.  I feel it’s sad that whoever wrote the article felt that IE8 could not stand on its own merits and so had to do some, ah, creative spinning of the truth to promote it instead.

, , , ,