Orchard CMS


Recently I have been doing development work on Orchard CMS, creating and modifying modules in Visual Studio. I have found that the documentation is fairly limited especially for the new features. I have had to use stackoverflow.com and various blogs to make my new Modules work.  So far the most useful blog has been


This tutorial proved to be useful however it covers a lot of ground and I had problems debugging it.

 Basic Requirements for a module

If you want to create a basic content part in your module it must have the following components.

  • Driver
  • Handler
  • Model
  • Data tables, created from the data migration
  • placement.info entries.  Without this your part will not be displayed.
  • Module.txt

If you are adding a new feature to a module then you will need to mark each of the classes with the OrchardFeature attribute.  The FeatureName must match the Features value in Module.txt.

Orchard Data Schema

The key feature of Orchard is that a Content Definition is made up of Content Parts. A Content Definition can also have Fields on the Content Item itself as well as properties on the Parts which make up the Content Definition.  This SQL query shows how this is reflected in the database is structure.

SELECT i.Id, v.Data, t.Title
FROM Orchard_Framework_ContentItemRecord i
JOIN Orchard_Framework_ContentItemVersionRecord v ON v.ContentItemRecord_id = i.Id
JOIN Title_TitlePartRecord t ON t.Id = v.Id
WHERE i.ContentType_id IN (SELECT Id FROM Orchard_Framework_ContentTypeRecord WHERE Name = 'MyContentDefinition');

The v.Data in this query will return XML which contains the Content Definition Fields and the Title comes from the TitlePart which is a part of the ‘MyContentDefinition’ Content Definition (confusingly, ContentType is another name for Content Definition).

In Orchard 1.8 the Part data can be is stored in the Data XML instead of using a separate table for each part.  This is implemented with an InfoSet which will de-normalize the data and improve DB performance.

If you create your own parts (in a module) they will be similar to the built in Title Part however your Part Record will not have a ContentItemRecord_id field.  The Id field will be used to join onto the content item record, for example

JOIN MyCompany_MyModule_MyPartRecord p ON p.Id = i.Id

Here you can see that the primary key on your record table is also a foreign key linking to the content.  You can query Orchard data by building HQL (NHibernate) queries in C#.  This is probably the most efficient and powerful way to access Orchard data however it is not always used because it can add complexity where built in Orchard functions could be used.



HTML5 is a specification which is used for developing web browsers like Internet Explorer.  It helps to define what the browser should do.

What is the point of HTML5?

Compatibility Issues

The problem with web development is that there are significant differences between various web browsers.  This includes differences between newer versions of a specific browsers such as Internet Explorer and differences between rival browsers.  Also there are a number of plug-in tools (e.g. Flash) which may need to be installed. Continue reading

Resource files in Visual Studio


Resource files can be added to a project in Visual Studio.  These are xml based text files which contain key-value pairs.  When the resource files are saved, source code will be automatically generated that can be compiled like any other C# or VB file.  It is advisable to put the resource files into a separate project so that they are contained within a common namespace.

Continue reading

Custom Fonts

If a font on your web page is not installed on a client machine then there may be difficulty in making that font appear on the page when it is displayed. Normally the browser will use fonts installed on the client machine however there are various ways to get around this problem but different browsers handle fonts differently. Adding custom font support for all browsers can be a big task so there are some tools that will help. Continue reading

What exactly is a CMS?

Content Management Systems are used to manage information that goes onto a website. A typical example is a blog.  Multiple websites can be stored and managed in one place and new content can be added to the websites without any involvement from engineers. Content includes the layout, navigation and style as well as the information that is presented on a website. This means that a lot of the work is done by the members who create the content. There are two separate User Interfaces on a CMS.

  • Publicly available websites that can be viewed by anyone
  • Members area where users can log-in and control the websites

A CMS can usually be extended by using components such as ‘Widgets’.
Continue reading