Wednesday, September 14, 2016

A CSS-only Approach to Tooltip Icons for Help Text in Episerver

I was working through cleaning up the interface for my latest Episerver project the other day - clearly defining names, adding icon attributes to pages, adding helpful descriptions - and I saw a Tweet buzz across the wire for an article on adding icons to properties with Help Text (Description). The article is actually really good, and it got picked up by a couple colleagues of mine who implemented the solution in it. It's by Ted Nyberg and you should check it out here:

It sparked a memory for me, though, of another article I had bookmarked a short while back by Alf Nilsson, on how to expose the Help Text (Description) alongside the property name in the UI, eliminating the need to hover. Again, it's another good article and you should read it as well:

Both of these articles touch on a pain point of mine, and various other Episerver developers, around how the Help Text (Description) is displayed for properties in the UI, and it got me thinking of another approach to address this issue, essentially combining these two ideas.

Monday, June 27, 2016

SelectionFactory fun in Episerver - Part 1

Drop Down lists are a common request and question in the Episerver world, for anyone fairly new to the platform. That's because Drop Down lists are a great way to provide users with a straight forward interface for providing a value to a property; the options for values are right in front of them. They also make it easier for a developer working with those property values, because they know what the possible values are that they will be working with. Unfortunately, someone new to the Episerver platform might not know the best way to start creating properties with Drop Down lists.

Linus Ekstrom ( blogged about the basic approach of using SelectOne and SelectMany with predefined values in 7.5, and Joel Abrahamsson ( and Anders Nordby (, along with several others, have written good blog articles about working with SelectOne and SelectMany properties sourced by Enums.

Aside from linking to those articles to familiarize you with the people (they're pretty cool) and the approaches, this article is to help provide additional methods for building out lists for SelectOne and SelectMany properties you want to use Drop Down lists for.

Monday, June 13, 2016

Good products don't save bad service: From building a house to building a website

Last night I was sitting around a small bond fire with some friends chatting about our houses. We just moved into our house last October, after having it newly constructed in this new neighborhood. My friends moved in several months prior to us, and watched the construction of our house, which seemed like it was never going to end. We had the same builder, who provides a 1 year touch-up service as part of their warranty to address any "settling", or shrinkage, and my friends just completed their 1 year follow-up.

The difficulties we both had during construction, and post-closing, were the topic of conversation when one of them asked, "would you build another house with them?" I thought about the question for a minute, because the quality of the house and the layout is something we all agreed was above average. But I replied with, "No, I don't think so. A good product won't save bad service."

After the fire I went home, and the similarities between the construction process of our house, and what customers, developers, and agencies go through for websites prompted me to write this. This is my list of issues you might face, along with some pointers for you when starting a new project, or a new relationship with a customer.

Tuesday, May 24, 2016

A Simple Language Selector in Episerver

On my current Episerver project, we had a need to support a couple languages for the website, and display them via a simple nav-like language selector at the top. Being fairly new to Episerver, I started looking into how I needed to build it out and what was involved. I found a bunch of information on Localization and Globalization, and it helped point me in the right direction, but there were some minor differences I found due to the age of the articles. Episerver has been updating pretty actively since version 7, so some of the information wasn't up to date.

After putting together my solution, I wanted to share it and point out a few things I encountered along the way. This post is my attempt at adding some updated information while working with Episerver 9.x and how I built our language selector.

Friday, May 20, 2016

Moving your changes to a new branch in Git with Visual Studio

I am pretty sure this scenario happens to everyone a couple times during a development cycle, if they are working with source control and branching. You make changes, you commit those changes, you merge those changes to a different branch. You make more changes, you go to commit those changes, you realize you are still on that different branch. Now what?

In Visual Studio you cannot simply switch branches with changes that need to be committed. Because of the way Git manages the commit history, it could break or lose changes if this happened. Instead, you are presented with a lovely message:

Thankfully, there is a pretty simple approach that seems to work well for just this case: Stashing.

Wednesday, April 6, 2016

Episerver Block Controller error

I am expanding my horizons in the CMS world to add Episerver to the list of platforms I develop on, and the process is a bit of trial-and-error, with an emphasis on the "error" part the past couple weeks. I am coming into this without attending any Episerver training, so this may be known to everyone else, but, nevertheless, I found this error rather intriguing and wanted to share in case someone else missed the cause due to lack of coffee.

I am building a site using MVC, and with that comes the creation of a block class, and a block controller. I added my block to my Page model and then proceeded to create the controller. Using the standard approach in Episerver, I named the controller and block to match, with the block called CalloutBlock, and the matching controller CalloutBlockController. After copying some code into my controller, building, and refreshing my page, I was greeted with the following, lovely message:

Monday, April 4, 2016

Missing Templates with Email Campaign Manager in Sitecore 7.5

I have been working with debugging some Sitecore issues as of late and they have all seemed to deal with modules or packages being installed. Frustratingly, it seems like there is a different outcome among instances when I install a module on a Test server, and install the same module into a clone of a site on my local development, or another developer's machine. The latest culprit is the Email Campaign Manager (ECM).

Installed into a Staging server, the ECM module worked fine, allowing us to go through and create messages and test the system. However, I installed the same exact package into my local development environment, that was basically a clone of Staging, and when I went to create a message, the template options were empty.

Monday, January 25, 2016

All Geek, All the Time: Path Over 2048 Chars Kills Windir Environment Vari...

It's amazing that we are in 2016, have gone through Windows 8, 8.1, are on 10, and support is still active and available for Windows 7, yet we still have issues like this plaguing us. I was going to write a blog about it, but the blog below is EXACTLY how the issue surfaced for me, and is the EXACT solution as well.

To make it easier, I copied the PATH value out and pasted it into Notepad++, did a Find & Replace with "Extended" checked, and split the lines with a Find value ";" and Replace value ";\n". After removing a couple lines, just reverse the Find and Replace values, copy and paste the single line back into your path, and save. I also had to reboot for it to take affect.

Read up on the issue that's still valid in Windows 7 over 4 years later...

Friday, January 8, 2016

Sitecore Search - Part 1 - Introduction

Using a search-based approach instead of native APIs is a great way to improve the experience users have with your Sitecore application, for performance and usability, among other reasons. LINQ to Provider is the search API piece of LINQ to Sitecore that allows you to develop search-centered solutions in Sitecore.

LINQ to Provider uses a LINQ query syntax to abstract your code, and focus, from the provider specific query parser. As a developer, this means flexibility and efficiency, since you can write some search code for a Lucene based search project, and move that code to a SOLR based project with little modification. And you don’t have to construct provider specific queries yourself.