Downtime - not umbraco related

Thursday, December 20, 2007 by Niels Hartvig

A mis-configured SQL Server filled up the servers discs today, which have caused in-stability and downtime on umbraco.org and the forum.

It was not umbraco related, but simply me who thought I was a DBA 18 months ago and made wrong maintanence plans - shame on me. I'll have a proper DBA looking over the setup as soon as possible, so it hopefully won't happen again.

Sorry for the inconvenience! 

Dec 11: Source for extensions

Friday, December 14, 2007 by Niels Hartvig

It shouldn't come as a surprise to you that umbraco is open source, and probably not much of a surprise that there's a ton of free packages out there for you. But did you also realize that most of those packages comes with full source code as well?

For most of the packages that I've initially build, I've added them to a codeplex project called codeplex.com/umbracoext:

dec11-extensions

It includes full source for the Dashboard controls, the MemberControls, the RSS Package, the Utilities and the new umbSearch that indexes Office and Pdf files as well. Casey Neehouse have added his AutoForm Plus package as well, and anyone else is welcome to share their work here.

So if you need to modify a package or are curious how the RSS package are extending the umbraco UI, all the answers are here - for free.

Sharing is Caring - merry Christmas :-)

Dec 10: Dramatic performance increase in two minutes

Friday, December 14, 2007 by Niels Hartvig

The past episodes of the Christmas Calendar has been on a start tutorial, but we'll need some goodies for longtime umbracians as well.

Today is a little easy gem that will make the umbraco admin interface seem much faster - and best of all it'll take a couple of minutes.

umbraco uses quite a number of files to serve it's neat UI. From html to images, css and javascript an umbraco user with full access to the admin UI can quickly download more than a 100 files at the first few page clicks. Now even though these files are tiny (most of them around 2-3kb), IE can only serve 2 files at the time, making the initial start of umbraco as well as opening an editing page seem very slow.

The tricks is to add cache headers in IIS and it's drop dead simple to do. Open up IIS and locate your site. Then right click the "/umbraco_client" folder, select properties and choose the "HTTP Headers" tab. Check the "Enable content expiration" and set "Expire after 7 days":

dec10-add-content-expiration

You can do the same for "/umbraco/images" and "/umbraco/js" as well.

The performance increase will be significant for your users and they'll love it. However, when planning an upgrade that involves changes to the caches directories (3.1 will), remember to set it back to just one day and then do the upgrade afterwards (that way you're sure you won't have any cache coherency issues with the files/js in umbraco).

Dec 9: Using Master Templates

Thursday, December 13, 2007 by Niels Hartvig

If you've followed the past tutorials you've learned about storing data using Document Types and presenting content using Templates. In this tutorial we'll look at have you can use Master Templates to store central parts of your site markup in one place and re-use it in others.

 

Master Templates

A master template is the exact same thing as ordinary Templates and they're created in the same way as we created our "Home Page" template in the previous tutorials. The only difference is that a Master Template includes a bit of information about where Child Templates should be inserted. This is a very simple, but efficient way to ensure that you don't repeat yourself and only need to make modifications in one place. You can even nest multiple master templates for maximum flexibility.

For a start we'll create a Master template based on the markup in our "Home Page" template. Then we'll update our "Home Page" template to use our new master template and at last we'll do the same for our "Text Page" templates. So head over to the "Settings" section of umbraco and let's get started.

 

Creating a Master Template

To create a Master Template, simply right click "Templates" and choose create:

dec9-create-template

In the Dialog, call the new Master Template "Master" and click "Create:

dec9-create

As you can see in the tree view, a new template has been created, so let's copy the markup from our "Home Page" template to the master.

Click the "Home Page" template in the tree view and copy the markup (by either using the mouse or keyboard short-cuts: CTRL+A and CTRL+C):

dec9-copy

Now, click the "Master" template in the tree view and paste the contents into the text area.

The next step is to make a little modification to our markup which will turn this template into a Master Template. We'll replace the <?UMBRACO_GETITEM field="bodyText"/> with an instruction to insert a child template instead. That instruction is called "<?UMBRACO_TEMPLATE_LOAD_CHILD/>" and remember that you can always get a list of template elements by clicking the little blue help icon in the toolbar. Remember to click the "Save" icon and then your final markup should look like this:

dec9-master

 

Using the Master Template

The next step is to modify our "Home Page" template so it uses our Master Template. It's very simple, all you need to do is to choose the Master Template from the "Master Template" dropdown. Once that's done, we can remove all the markup from the "Home Page" template which now is stored in our Master Template. So edit the "Home Page" template, choose "Master" as the Master Template and modify the template markup so it looks like this (and remember to save):

dec9-new-homepage

As you can see our Home Page template is much cleaner and because we can repeat this technique on all the other templates we'll use on our site, future changes in the central markup will be very easy to maintain, as it's stored in one single template instead of being spread across all.

So that was Master Templates. The next step is to learn about "Macros" which are used for dynamic lists and forms in umbraco and we'll use it to create a dynamic navigation for our tutorial site. But that's not until a couple of days.

The next couple of Christmas Calendar chapters will be some tips and tricks for power users - they also need a little love from umbraco Santa, don't they :-)

Level 2 Training in Australia

Thursday, December 13, 2007 by Niels Hartvig

This is why I love my job, I'm going down under on January 30-31th to do a Level 2 course in Melbourne, Australia. YAY!

There's six to eight available seats and the price is AUD1.400. For all the details and the sign up form, check out the special Australia Course page.

Kudos to Next Digital to be the nice sponsor of the adventure.

Btw: If you got ideas for sights to see I'd love to hear about them. I'll be staying with the family for three weeks :-)

Dec 8: Adding page information to templates

Wednesday, December 12, 2007 by Niels Hartvig

In the previous tutorial we managed to create a very simple "Hello World" template, which only outputted a hard coded paragraph with Hello World. That's not of much use, so in this tutorial we'll look at how to use dynamic values from our pages in templates.

Before we start, it might be a good idea to recap what we've done so far:

  • We've created two Document Types and templates - "Home Page" and "Text Page"
  • We've added some properties to the Document Types, so an author could edit some content in a WYSIWYG editor as well as add some Meta data information. These properties had:
    • A "Name" which the author will see
    • An "Alias" which is used in code and templates to access the property
    • A "Tab" so we can divide properties into different section for better overview
    • A "Type" which very simplified determines how the property looks like when editing it - is it an upload field, a WYSIWYG editor and a date chooser
  • We've added a few pages to the content tree
  • We've edited the "Home Page" template and hard coded Hello World

Adding html to our template

Now it's time to create a little more advanced template where we'll use the values stored on our pages. Have no fear, it's very easy and we'll take it slow.

Start by going to "Settings", fold out the "Templates" tree and click the "Home Page" template:

dec8-helloworld

We'll replace the "Hello World" with some proper markup, so remove the "Hello World" and paste the following html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>[A title should be placed here]</title>   
    </head>
    <body>
        <div id="container">
            <div id="navigation">
                [Add navigation here]
            </div>
            <div id="content">
                [Add page content here]
            </div>
        </div>
    </body>
</html>

Click the Save icon in the toolbar and your screen should look like this:

dec8-stubs

As you can see, this is some very bare bone html complete with placeholders which will replace with some umbraco template elements in a moment. For now, go look at the website and do a view source:

dec8-viewsource

Notice how the markup outputted by umbraco is completely identical to the markup you added in the template, including whitespace (tabbing). It shouldn't come as a surprise, remember I promised that umbraco wouldn't mess with your markup, but now you got evidence. With umbraco, you finally have a ASP.NET CMS that respects your markup. Now it's time to add some dynamics to the placeholders!

 

Accessing page properties in the templates

Let's head back to our "Home Page" template and replace the placeholders (the text in the square brackets) with some dynamic content - it's time to play with some umbraco template elements. So far we've just been adding good old html to the template, but if you want other than hard coded content in your templates (and that would be nice wouldn't it?) then you'll need to learn a little more.

In the previous tutorial I showed you the five different umbraco elements, but I also promised that you didn't really needed to write them yourself because the template editor offers build in UI.

We'll start by adding the title of our umbraco page to the html title header, so remove the text "[A title should be placed here]" and place your cursor inside the "TItle" elements and click the "Insert umbraco page field" button in the toolbar:

dec8-pagefield

A new dialog will appear giving you some handy options for inserting page properties to your template. For now we'll focus on the simplest way to insert a property and then we'll get back to the various options in a later tutorial. If you open the dropdown from the "Choose field" you can see a list of all the page properties that's currently created in your umbraco installation. The ones in the bottom of the list, prefixed with a "@" is build-in properties that exists on all pages created. The ones in the top is the custom ones you've created.

For now choose "@pageName" from the "Choose field" drop down and click the "Insert" button in the bottom of the window:

dec8-choose-pagename

umbraco will insert the template markup needed for the title of the page into your template:

dec8-pagefield-result

Now do the same for the [Add page content here]:

  1. Remove the placeholder text
  2. Click the "Insert umbraco page field" button in the toolbar
  3. Choose "bodyText" in the dropdown (that's the alias of our WYSIWYG property we created in a previous tutorial, remember?) and click "Insert"
  4. Click "Save" in the toolbar

The final result should look like this (we'll work on the navigation in a later tutorial):

dec8-final-template

Now, go see your "Home Page" of your website. Notice how umbraco automatically insert the content into the template. You can try modifying the contents of the WYSIWYG editor or the title of your page. Just remember to Publish the page and then view it afterwards:

dec8-result

And again - view source will reveal the cleanest markup ever seen from a .NET powered CMS:

dec8-finalsource

 

Next steps

Now that you've learned to insert properties into a template the next step will be to look at how we can apply master templates. We'll look at that tomorrow.

1508 - the most beautiful umbraco driven site

Wednesday, December 12, 2007 by Niels Hartvig

1508.dk just got to be the most beautiful umbraco site ever launched (it's in Danish, but look at it for the stunning visuals and to remember that umbraco gives you full design freedom).

I love the handdrawn flash animations in the top, but also remember to take a look a these case story pages (where the usual white background suddenly turns black - awesome):

Great job! We better go add it to the reference page - do you know of a cool umbraco site? Tell us and we'll get it up on the 'org. We'll also soon get the community submitted sites back - promise!

Five days of Christmas Love Wednesday

Wednesday, December 12, 2007 by Niels Hartvig

I'm not dead, just been sick and after that working on getting the forum back up all day. Tomorrow is all about catching up. So santa might be getting old and slow, but he doesn't forget ;-)

Dec 7: Templates part I - The introduction

Friday, December 07, 2007 by Niels Hartvig

Over the past two tutorials we've learned about Document Types and how they were used to organize our data model. We also learned how we could control the visual appearance of the Document Type in umbraco and we tried create some content based on the "Home Page" and "Text Page" Document Types. So far so good.

But one thing is entering and managing data, another thing is actually presenting them and so far all we get when we preview our pages is plain old whitespace:

dec7-before-templates

But  fear not my friend, it's simply because we need to learn a bit more.

 

Introducing templates

One of the things that people really likes about umbraco is that it gives you complete - as in total, non-destructive and non interfering - control over the output. This assures that you can create valid, semantic and accessible markup in anyway you want. And so far we haven't told umbraco anything, so it proves it's worth; I won't do anything, because that's what I'm told. If only I could raise my kids like I raised umbraco ;-)

The solution to our blank page is adding markup to our templates, but before we do that I'd like to take a moment to explain what a template in umbraco actually is - which is very simple. An umbraco template is basically text - usually (X)Html - combined with umbraco tags (elements). This means that you can simply take your own markup and replace the chunk of "Lorem Ipsum" (or whatever you call your placeholders) with umbraco tags. That's it! umbraco will respect your attention to detail when it comes to markup and output exactly the same as you created, including whitespace, tabs and linebreaks and it gets even better - you don't need to learn a new proprietary and obscure template language.

 

The Template Tags

Instead of having it's own template language and re-inventing the wheel by having yet-another-way-to-handle-presentation-logic, umbraco is based on standards for dynamic content, which we'll get back to in a moment. For know, let's focus on the simplicity of the template elements which consists of five element (yes, just 5!):

  1. <?UMBRACO_GETITEM />: This is for inserting a property from the current page that's rendered. So if we wanted to output the name of the page we would simply write: <?UMBRACO_GETITEM field="pageName"/> (in fact we wouldn't as there's a complete UI - you don't even have to learn the element syntax!)
  2. <?UMBRACO_MACRO />: This is for inserting dynamic content like lists or forms. We'll explore macros in depth in a later tutorial, but basically a macro is a wrapper for either a .NET control or an XSL Template, which is a standard made by W3C, the same group who developed Html.
  3. <?UMBRACO_TEMPLATE_LOAD_CHILD/>: With umbraco you can have the central layout stored in Master Templates and this element will determine where to insert child templates that uses the master.
  4. <?ASPNET_FORM />. As umbraco is based on Microsoft ASP.NET, but don't output any markup unless told (you get the picture now, right!) you'll need to tell umbraco where to put a serverside form if you use .NET Controls.
  5. <?ASPNET_HEAD />. If you wish to use an ASP.NET server side Head element, you'll use this element

Help on the elements is always near by - simply click the "Help" button in the toolbar when editing a template and you'll get the list:

dec7-help

 

Updating our template

Enough with the theory - let's try to make a simple templates. Go to the Settings section and foldout the templates. If you've followed the previous tutorials, you can see we have two templates which was automatically created when we added the corresponding Document Types (because we checked the "Create matching template" box when creating the Document Type):

dec7-templates

Click the "Home Page" template and you'll see this view:

dec7-edittemplate

For now we'll concentrate on the "Template" textbox, so try to add "<p>Hello World</p>" into the big textarea and click the Save button in the toolbar. Now try go previewing your Home Page:

dec7-helloworld

Stunning!

 

Adding page information to the template

Now you always need a Hello World Sample, but wouldn't it be great to improve just a little? Well, come back tomorrow and we'll start using the elements (I would have liked this tutorial to been a little longer, but I ran out of time!)

Dec 6: Document Types part II

Thursday, December 06, 2007 by Niels Hartvig

In the last tutorial we learned that Document Types are essential in an umbraco implementation - without Document Types, no content can be created. So we learned that creating Document Types is a very easy point and click process and we can add an unlimited number of properties to a Document Type. That means we can build our data model to fit our needs without any limitations and without writing any code - we even get a beautiful UI for our end-users automatically.

We started off by creating a simple Home Page Document Type and added some properties. Now it's time to add a Text Page Document Type and allow Text Pages to be created below our Home Page. We'll create the Text Page Document Type in the Settings section of umbraco using what we learned in the last tutorial. First go to settings:

dec3-settings

Then right-click the Document Types and choose create:

dec3-create

In the pop-up dialog type "Text page" as the name, remember to check the "Create matching template" box and click the "Create" button:

dec6-create

As you can see a new Document Type has been created named "Text Page":

dec6-done

Again we'll want to add a tab and properties to our Document, this time we'll add a tab called "Content" and a property of a Rich text editor type named "Content" with the alias "bodyText". If in doubt consult the previous lesson, but the final result should look like this:

dec6-textpage

Customizing the looks of the Document Types

So far we've learned about adding tabs and properties to a Document Type, but we can also modify the visual appearance of the Document Type in both the Create dialog and in the tree view. It's done on the "Info" tab where we can choose an icon for the tree in the "Icon" dropdown, as well as a thumbnail and a description to be shown in the "Create Dialog". For the textpage we'll choose the "doc.gif" as the icon and "docWithImage.png" as the thumbnail. In the description we'll write "A text page offers a simple way to add content to the website by using a WYSIWYG editor" (or something else if you prefer):

dec6-info

Now remember to click the "Save" icon in the toolbar.

 

Defining the type structure

So now that we got a Home Page type and a Text Page type, we're ready to add site content. The only thing we need to do now, is to allow the "Text Page" type to be created below the "Home Page" type, so that our Authors can start creating content. It's done on the "Structure" tab when editing a Document Type.

So open the "Home Page" Document Type, click on the "Structure" tab and check the box next to "Text Page". As you can see a Document Type can be allowed below itself making it possible to create hierarchies of unlimited depth:

 dec6-structure

Again, remember to save and then edit the "Text Page" Document Type and do the same; allow the "Text Page" Document Type to be created under neath if self, by checking the box next to "Text Page" on the Structure tab.

 

Adding pages to our site

Now that we got our simple yet powerful structure in place, we can finally create our site hierarchy. So head over to the "Content" section, right click the "Home Page" created in the last tutorial and choose Create:

dec6-about

As you can see the Create Dialog uses our Description and Thumbnail we choose and you can even add your own real thumbnail screenshots to this dialog by copying them into the "/umbraco/images/thumbnails" folder, which will give the authors a nice well-known visual metaphor and make the whole backoffice seem much more tailored for them.

Now go create a couple of pages so we'll have something to play with when I'll see you tomorrow for a tutorial on Templates:

dec6-sitemap

If your pages are dimmed in the tree view, it's because they aren't published. You can either right click a Document and choose Publish or click the "Save and Publish" button in the toolbar when editing a Document.

Dec 5: Sort by name or create date

Wednesday, December 05, 2007 by Niels Hartvig

As promised the Document Type and Template tutorial will continue full speed ahead tomorrow, but until then here's a little trick if you need to sort your documents by either Name or Create Date.

 

Start by right-clicking the parent of the Documents you wish to sort and choose Sort (a huge screenshot with the primary purpose to brag about umbraco naturally being Firefox compatible):

dec5-sort

 

In the dialog you can select and drag the nodes you wish to sort (you can select multiple nodes by either holding down shift or ctrl keys), but you can also click the headers and thereby sort by either Name or Create Date (just remember to click Save when you're done):

dec5-headers

Once you're done sorting, you'll need to republish the entire site in order to make umbraco refresh the cache. Republishing the site doesn't publish all documents, but simply reorder and validates the order of the published nodes and only takes a split second. You republish by clicking the top node and select "Repubilsh entire site":

dec5-result

In future version of umbraco, the last step will automatically be done by umbraco as this obviously isn't logic for the end-user.

 

For more advanced usages this approach can be automated writing an ActionHandler that will sort item on Publish. But that's a topic for the Level 2 Course tomorrow ;-)

Dec 4: How to get the W3C validator to recognize your pages

Tuesday, December 04, 2007 by Niels Hartvig

Today should have been part two on the series on Document Types. But things doesn't always turn out the way you planned and this day was one of them. So it's just one of the quick tricks I had planned to save for later.

Many people are attracted to umbraco because it makes it possible to comply with standards, making it possible to create accessible webpages with valid (x)html. When you've spend time struggling with your markup it's always a big satisfaction to get that big green "VALID" message from W3C. However, if you use .NET controls it's harder that it ought to be.

Now, Microsoft have done massive progress in making their controls produce better markup and with ASP.NET 2.0 we got the possibility to tell it to run our website in XHTML Strict mode by adding an element in the web.config (default in the umbraco distribution). However, I guess that Microsoft wasn't really aware of the W3C Validator that most of us are using as the .NET Framework recognizes the validator as a downgraded browser and starts spitting out invalid html - doh!

But fear not - the fix is easy and all you need to do is add the following to the /config/browsercaps.config in your umbraco installation:

<case match="W3C_Validator*"> tagWriter = System.Web.UI.HtmlTextWriter W3CDomVersion = 1.0 </case>

Now go make your site valid! I'll be back tomorrow with another trick and then continue the Document Type and Template tutorial Thursday and Friday.

Dec 3: umbraco basics, Document Types

Monday, December 03, 2007 by Niels Hartvig

Over the next couple of days, I'll go through some of the essential umbraco concepts:

  • Document Types
  • Templates
  • Macros

umbraco is a bit different from other CMS's as it's more generic and not based on modules. While a module based system might give you some functionality very fast, it's very doubtful that it's actually the functionality you really need and whether you can tailor it to your needs is often a combination of luck and hacking.

umbraco works in another way as it provides a uniformed way to create web based functionality. It's a bit like a toolbox or a collection of Lego bricks which doesn't do anything straight out of the box, but gives you access to loads of things very fast and with just enough flexibility. If we stick to the Lego analogy you could say that

  • The .NET Framework is Lego Technic. Anything is possible, but it can also be hard to start and very time consuming. At the same time you almost don't have any constrains at all which might make it hard to focus
  • A module based CMS is Lego Duplo. This is the complete opposite of Technic - if you need a car, take the Car brick, if you need a plane, well go get the plane. Which is brilliant if it does exactly what you want - you're up and running in no time. But if you need customizing however, you might ended in a blind alley and if there's no brick that does the job - just too bad, the choice is down to convincing someone to build that brick.
  • With umbraco we're trying to be just plain old ordinary Lego. Making most things possible with a well defined set of standard building bricks. The trick for living and working happily with umbraco is to know and understand those bricks. If you try to use umbraco like a module based CMS, you'll hit the wall sooner or later and you might even end frustrated. So it might take a little while to learn, but it'll be worth the effort. If you're one of those who still lives in the last century and believes that comparing CMS by module charts is the right path, then you'll need to open your mind in this tutorial. In return you'll have a chance for an eye opener that will change the way you work and never want to make you look back :-)

BEFORE YOU START:

This tutorial assumes that you have a completely clean install of umbraco without any starter kits installed. To see a large edition of the screendumps used in this tutorial, simply click them.

 

What is a Document Type

A document type is one of the three essential bricks necessary to get a site up and running. Without a Document Type, you can't create content. See, a Document Type is a bit like having a table in a database - it defines the fields that can be edited on a page. Well, in fact it can be even more generic and flexible than this, but for now we'll treat Documents as pages. Later on I'll show you how to treat Documents as true objects for maximum flexibility.

Let's create our first Document Type and examine the way Document Types are edited. Go to the "Settings" section and Right Click "Document Types" and choose Create:

Choose settings

In the dialog box give your Document Type a name - say "Home Page" and also check the box saying "Create Matching Template" and click the Create button:

Create nodetype dialog

Congratulations, you've just created your first Document Type - it wasn't that hard was it?

Home Page created

Now, go to the content section, right click the content node and choose Create. As you can see we now have the choice of your newly created "Home Page" Document Type. So go ahead and create your first Document:

Create Document dialog

When you click create, a new Document is created and you're instantly in editing mode. If you look at the Document in the tree, it's dimmed because it's not published.

Edit the new Document

As you can see, there's not much we can edit on our "Home Page" document type apart from a couple of standard meta data fields like the name of the Document and some release/expire date information. Time to add some Tabs and some "Generic Properties".

Document Properties

Now that the Document Type has been created, it's time to add some Tabs and Generic Properties so we have some editable fields on our Document. A property is very similar to a column in a table, but when you add columns to tables you usually think in types of data like "dates", "nvarchar" or "blob". With properties in umbraco, you should think how an editor would edit the property - like a "Rich text Editor", "An upload field" or "Date chooser".

It's very easy to add, remove and sort properties on a Document Type as there's a full web based ui. No editing of config files and no lines of code needed. To make it even easier for the user to edit properties we have the option of dividing them into separate tabs. So we'll start by adding some tabs called "Content" and "Meta data". Go to Settings, open your "Home Page" Document Type and click the "Tabs" tab. Then type "Content" in the textbox and click the "New Tab" button. Do the same for the meta data tab:

Add tabs

Now that we got the tabs, we can add some properties. Click the "Generic Properties" tab and then click the "Click here to add a new property" label:

Add property

In the form that opens, start by adding "Content" as the name and "bodyText" as the alias. Next we'll have to select a type. Now the type is the way the editor should edit our property and umbraco ships with twenty different types from Date Choosers a Richtext Editor:

List of default Property Types

For this property we'll use the "Rich text editor" which gives us a full WYSIWYG editor that makes it easy to edit content while ensuring that the markup is valid XHTML Strict - quite a nice combo for both editors and developers who appreciate web standards. In the tab combo, choose "Content" and then click the Save icon in the toolbar.

Repeat the step above to create a "Textstring" on the tab "Meta data" with the name "Site name" and the alias "sitename" and a "Textbox multiple" on the tab "Meta data" with the name "Description" and the alias "description". Remember to save in between by clicking the little save icon in the toolbar.

Now you should have a screen looking like this:

Properties added to Document Types

Go back to your content and try to edit your Home Page. As you can see we have our two tabs and a completely integrated WYSIWYG editor for our disposal:

Rich text editor added to our Document

Try clicking the different tabs and add values. As you can see it's really easy to create Document Types and adding fields and your editors will love the simple user-friendly interface.

Tomorrow we'll add some additional Document Types and see how they can be linked together to create a site hierarchy.

Hoped you liked it so far and remember to add comments below if you like.

Our spam filter is learning

Monday, December 03, 2007 by Niels Hartvig

When you submit a comment to the blog, there's a slightly big chance that it gets identified as spam, but fear not. We're constantly monitoring the spam and while it might take a while before your comment will appear it'll get better over time as our wonderful spam filter is getting smarter and smarter.

umbraco.org gets pretty hammered with spam as this chart shows, so unfortunately we had no other choice than to implement a smart but also strict filter. The chart doesn't even show how the FAQ and other forms on this site gets spammed too.

spam

However, we're lucky enough to be using Defensio - a really smart filter that over time will learn what's relevant and what's not on this blog. umbraco MVP Per "objects.dk" Ploug Hansen made the .NET api for Defensio and I'm happy to say that it works sweet with umbraco.

Dec 2: Resources and where to find help

Sunday, December 02, 2007 by Niels Hartvig

Before we really kick off this 24 day umbraco tutorial, I'd think it's nice knowing where to look for help and references when working with umbraco, so here's a list of pointers and blogs I follow.

Official umbraco resources:

  • The official umbraco website - umbraco.org
    You're right here, but do you know about all the gems? The book section is full of neat inspiration to get you started and open eyes for special umbraco functionality like the integration of the Metablog Apis or "umbraco Base" for accessing .net classes via a simple url.
  • The official umbraco forum - form.umbraco.org
    The most friendly forum in the world :-) With more than 10.000 posts and answers and traffic increase up from 2.500 visitors to 26.000 visitors in a year, it clearly shows that umbraco is getting more and more popular.
  • The Package Repository
    The collection of all community packages approved by the Package Repository Group. Mentioned in the december 1st post, but also accessible from outside the umbraco interface
  • Codeplex.com/umbraco
    The one-stop site for getting the umbraco source, submitting ideas and issues and asking core-related questions in discussions.

Semi-official resources:

  • umbraco community search
    A brilliant custom google search engine that indexes all umbraco related site, both unofficial and official. Instant access to more than 25 umbraco related resources including various umbraco related blogs.
    umbraco wiki
    Contains a good bunch of tricks and documentation collected by the community.

Great blogs:

  • Objects.dk
    umbraco MVP Per Ploug Hansen runs the best blog on umbraco. Packed with information on how to use gems well hidden in umbraco as well as releases of great packages like the Tagging Package and the Log Viewer
  • Umbraco Playground of Tim Geyssens
    Tim is hot in the heels of Per when it comes to releasing great packages. Even though it's less than a year since he started using umbraco, he's already released a Poll and Star rating package and are a great help in the forums

Got a resource to add - throw a comment. See you tomorrow where "the real" starter tutorial will begin.

Dec 1: Get packages for Christmas

Friday, November 30, 2007 by Niels Hartvig

Welcome to the umbraco Christmas Calendar – 24 small and large tips ‘n’ tricks over the next – surprise – 24 days. We’ll start out nice and slow:

Every day is almost like Christmas when working with umbraco. We don’t have a santa, but we do have a Christmas tree online 24-7. It’s called the Package Repository and if you’re not aware about its existence, you’re missing a lot.

The package repository is a centralized server containing packages approved by the Package Repository Group (PRG). It already contain useful packages to speed up your development, but much more are on its way as the fine folk of the PRG is hunting, testing and collecting packages around the community.

The Package Repository is completely integrated into umbraco v3 and can be accessed by:

  1. Right click “Macros” in the “Developer” section and choose “Import Package”:
  2. In the pop-up window select “Browse Package Repository” and you’re now in the candy store ready to automatically download and install packages to your umbraco installation.

Throughout this Calendar I’ll be using several of the packages in the repository and with a little luck the repository will already grow in December.

The Package Repository can grow asynchronously with the umbraco core, meaning that your umbraco installation will get access to more and more functionality as the community grows – umbraco will simply become better the more people are using it.

So go ahead and explore the Repository and play around with the packages. See you again tomorrow for more tips ‘n’ tricks in December

Umbraco Trademark Guidelines

Wednesday, November 28, 2007 by Niels Hartvig
Here's a heads up for usage of the umbraco trademarks. 
 
umbraco reserves all rights to the umbraco trademarks which is the umbraco logo and the "umbraco" name.
 
This means that you may not:
  • use the umbraco trademarks  in any commercial product names or logos.
  • use umbraco trademarks for promoting commercial services unless given permission. For promoting yourself as an umbraco consultant or umbraco solution provider, we'll have the certification products which include special logos that you're allowed to use

umbraco compiles with VS2008

Tuesday, November 20, 2007 by Niels Hartvig

Microsoft released VS2008 on the MSDN Subscriptions network yesterday, and I'm happy to announce that it's easy to get umbraco to compile on the latest version of our favorite developer tool:

vs2008

The only adjustments I need to add was updating the usage of the Action class in umbraco to use the fully qualified name as .NET 3.5 introduces a new delegate named "Action". I've added more details in the forum.

London Meetup on November 29th

Tuesday, November 20, 2007 by Niels Hartvig

If you're based in the London area, come join Per and I for a London meet-up at the wonderful offices of SAS Design in Bayswater, who're our fine hosts for this event.

A meetup is a very informal form, which basically means that we have a room, a projector, a bunch of great people with an interest in umbraco. It's a good chance to get a London based user group started and it's also a good chance to ask questions to me and Per. If you got a particular topic you want covered or got a cool thing to demo, leave a notice in the comments.

The details:

When: November 29th at 18.00
Where: SAS Design, 6 Salem Rd, Westminister, London W2 (map)
Price: It's free of course :-)
Later: There's a pub across the road, so... 

The room can hold around 15 people, so please respond in the comments if you're coming (and please let us know if you have to cancel).

umbraco 3.0.4 coming this week

Monday, November 19, 2007 by Niels Hartvig

There has been numerous reports on random NULL reference bugs with v3, especially on unstable shared hosts or on servers with many umbraco sites. We finally found the bug which is related to cache references and are currently testing on a larger number of sites. We'll commit the changes Tuesday this week to the source repository on CodePlex and release a patch version 3.0.4 this week (unfortunately we can't easily add the source to the repo right now due to 3.1 dev being the main branch on cp. We'll add the full source code as a separate download to the release).

Sorry for the inconvenience, but the patch is an easy, non-destructive, assemblies only update which should only take a few minutes and won't affect your site in any way (other than obviously get rid of the NULL reference bugs).

Fighting Frustrations - getting rid of annoyances in umbraco

Friday, November 09, 2007 by Niels Hartvig

Lost It Inspired by DotNetDave's blog post on his impressions on umbraco after implementing his first website, I added a new component to our bug tracker - "frustrations". It's the sort of things that can be hard to place in a specific category or maybe even hard to justify as a bug. It's the tiny things that pisses you of when implementing or using umbraco. It's small things. Things that shouldn't take long to fix. It's things that make you frustrated and for one thing - it's the things that needs to go away.

So I'm introducing the "Fighting Frustrations" campaign. For the rest of the year, let's get those frustrations collected and fixed for v3.1. Add your frustrations to our bug tracker and choose "Frustrations" as the component pre-fix your titles with "Frustration: " (choosing components is only available for the core team members apparently.

Now remember - this is for the small things, like "why do I need to write an xslt macro just to insert an image from a mediapicker", "why doesn't the XSLT editor insert references to my XSLT extensions automatically" or "why does the WYSIWYG clean pasted content when using the paste button, but not CTRL+V".

When you've submitted your bug, remember to tell other people to vote it up. The frustrations that gets the most votes, will get highest priority.

No more talking, let's walk to a new place with less frustrations. Go submit.

New courses in December

Monday, October 22, 2007 by Niels Hartvig

Last courses were a huge success and they sold out with people on the waiting list. So here we go again - Level 1 and 2 courses on December 6-7th in Copenhagen, Denmark.

As mentioned last round of courses sold out, so you might want to register quickly this time. As a special bonus we'll give you a 15% discount if you register before November 1st. To get the bonus, simply add "JingleBells" in the Coupon Code field.

The instructors will be Per "objects.dk" Ploug Hansen on the Level 1 course and me (Niels Hartvig) on the Level 2. Here's a little topic appetizer for what we'll cover:

Level 1 - implementing websites using umbraco:

  • Understanding the umbraco basics - Document Types, Templates and Macros
  • Creating a simple website from scratch
  • Understanding XSLT - creating a news "module"
  • Creating multi-language websites including coverage of Dictionary Items and Languages
  • Advanced properties: Re-use of properties and recursive usage of properties
  • Two-way feedback using AutoForms and Notifications
  • Great Packages: Implementing full-text searching and mail forms

Level 2 - umbraco for .NET Developers, extending and integrating solutions

  • Usage of .NET User Controls with umbraco
  • Debugging .NET Controls with umbraco
  • In-depth explanation of the umbraco object model and usage of the umbraco presentation APIs
  • Creating, importing and modifying content from .NET using the API
  • Extending XSLT with custom .NET classes
  • Usage of AJAX and umbraco
  • Custom event handling in umbraco using ActionHandlers
  • Walkthrough of Members and their APIs

Full details on training as well on how to order at the training section.

Douglas Robar new umbraco MVP 2007/2008

Monday, October 22, 2007 by Niels Hartvig

At CodeGarden '07 five MVP's were appointed, but since then the umbraco community has grown even stronger and especially one person has been a stunning resource; Douglas Robar of Percipient Studios. Through tons of swift replies in the forum, three books on installing umbraco and two great umbraco packages - XSLTsearch and ImageGen - he has helped newcomers as well as veterans.

The above is enough to justify the MVP announcement, but Doug's efforts don't stop there. He's also part of the package repository team and he was also the host of the first USA umbraco retreat back in April. Thank you Doug for all your hard work!

Percipient Studios, Doug's website and user interface design firm, is located in Louisville, KY. In addition to website and UI design, Percipient Studios also provides consulting and umbraco level 1 training to individuals and companies throughout the United States.

Umbraco dinner in Manchester, UK

Wednesday, October 10, 2007 by Niels Hartvig

I'll be joining Ryan, Ismail and others for an umbraco geek dinner in Manchester, UK on Tuesday at 19.00. Ismail (or he's wife) found this restaurant where we'll be enjoying a curry and chats on umbraco. Leave a message in the comments if you want to join!

Chat Tomorrow about the Package Repo

Monday, October 08, 2007 by Niels Hartvig

Tomorrow's chat (Tuesday) will be about the Package Repository and some great progress and exciting news.

The Package Repo Group have been doing some great work the past three weeks with ideas on package documentation, polishing of existing packages and release of some new packages.

Hear about their progress and give them loads of feedback tomorrow (Tuesday) at 19.30 CET - they deserve it. As always, the url for the chat is: http://forum.umbraco.org/chat

Courses: Level One Sold Out - just two seats left on level two

Tuesday, October 02, 2007 by Niels Hartvig

The level one course next week just sold out - let us know if you want to come on waiting list. There's just two seats left on Level two so don't wait to long as it might sell out as well and Level Two is sold out as well..

Info on time schedule and location is in the FAQ. Huge thanks to all who signed up - Per and I are looking much forward to meet you!

UPDATE: Level Two is also sold out. New dates for next courses will come soon, but please let us know if you're interested and we might make it sooner (current estimate is beginning of December). 

Code Sample: Importing members from outlook

Monday, October 01, 2007 by Niels Hartvig

I needed to import some address groups from Outlook into an umbraco installation for a friend last week. It was very simple and I though I'd share the code. Hope you like it - feel free to ask questions in the comments.

Before you begin

  1. This code assumes that you have a MemberType called "newsletter" and a MemberGroup named "newsletter" as well.
  2. Create a web application project and add references to businesslogic.dll and cms.dll
  3. Override the web.config in the new project with the original one from your umbraco installation and then remove all "ConfigSource" references in the web.config. Also remove the reference to the UrlReWriter in the httpModules section. If you're running umbraco v3.0.3 (latest) this new Web Application project will be able to work fully with the API as if it was running inside your umbraco installation. If you're working with an umbraco version lower than 3.0.3 you'll need to create an "umbraco" directory and copy the "version.xml" file.

The code - default.asp.cs

The code is quite simple. Our contact list from Outlook was exported to a textfile and consists of a names and emails separated by a tab. Remember to add a decent server timeout if you're importing thousands of contacts as the umbraco API can be a little slow as it's not optimized for bulk operations like this.

using System; using System.IO; using System.Web.UI; using umbraco.BusinessLogic; using umbraco.cms.businesslogic.member; namespace WebApplication1 { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { // Get default user User u = new User(0); // Get member type MemberType mt = MemberType.GetByAlias("newsletter"); // Get the newsletter group int newsletterGroupId = MemberGroup.GetByName("newsletter").Id; // Open files StreamReader re = File.OpenText(Server.MapPath("import1")); string input = ""; while ((input = re.ReadLine()) != null) { string importStatus = ""; string name = ""; string email = ""; try { // split the name and email by tab string[] nameAndEmail = input.Split("\t".ToCharArray()); // Some names exported by Outlook contains the email in brackets, we'll exclude that from the name. name = nameAndEmail[0]; if (name.IndexOf("(") > -1) name = name.Substring(0, name.IndexOf("(")); email = nameAndEmail[1]; // Create member Member m = Member.MakeNew(name, email, mt, u); // Add new member to newsletter group m.AddGroup(newsletterGroupId); // Print import status importStatus = string.Format("<li>{0}, {1} imported succesfully</li>", name, email); } catch (Exception ee) { // Print import status on failure importStatus = string.Format("<li style=\"color: red;\">{0}, {1} failed with reason: {2}</li>", name, email, ee.ToString()); } Response.Write(importStatus); } re.Close(); } } }

Courses almost sold out

Monday, October 01, 2007 by Niels Hartvig

The courses in two weeks are almost sold out, so don't wait too long if you're thinking about joining two wonderful days with Per Ploug Hansen, yours truly, 12-16 wonderful attendees and loads of umbraco hacking.

More info on the training pages.

Version 3.0.3 released with installer

Thursday, September 27, 2007 by Niels Hartvig

Time for a new tiny update to umbraco v3, this time the baby is named 3.0.3. Most importantly, this version fixes issues with publishing on load balanced environments. Download from Codeplex.

For new-comers (and the rest of us), the most interesting thing is that we finally got ourselves an installer! Yes, that's correct. The future default distribution format for umbraco will be a nice MSI file that handles everything from checking pre-requisites, setting permissions, adding site to IIS (including an AppPool), installing and configuring the database, etc. Installing umbraco is simply clicking next, next, next and takes less than five minutes. The installer works with Windows Vista and Windows Server 2003. Amazing!

The installer is made by Sebastian Gloeckner and Bernhard Frank from Microsoft Germany. Thanks a million!

Here's some screen-dumps (click to enlarge):

umbraco-install

umbraco-install2

umbraco-install3

 

Full update list:

Cozy chat tonight

Tuesday, September 25, 2007 by Niels Hartvig

At last weeks chat, I suggested informal recurring Tuesday chats. That is tonight at 19.00 GMT+1, so feel free to join. I'm celebrating the one year birthday of my youngest son, but that might even make the chat better when I'm not there to say "no", "no", "noooooo".

As "always" - the chat will be at our Campfire room and all you need is a web browser.

Introducing umbraco Pro

Thursday, September 20, 2007 by Niels Hartvig

Finally! After quite a lot of preparations, we're are live with "umbraco Pro" a supported version of umbraco. "We" are Per Ploug Hansen, Casey Neehouse and I, so that's a killer-team if you ask me.

umbraco Pro is a commercial license bundled with either three months or a year of support with guaranteed response time. Pricing starts at just €1.500 and details are in the feature matrix.

We're also in the process of getting the umbraco pro distribution certified by Microsoft, which should be ready by the end of the year.

umbraco Pro is not the end of the open source version of umbraco. It's a certified, supported alternative to the existing distribution which finally makes umbraco fully comparable to closed source products, but both editions are based on the same code base and that won't change. With "umbraco Pro" everybody wins. You can get answers to your umbraco questions, we can share our knowledge and finance the development of umbraco.

Go order ;-)

Minutes from todays chat

Tuesday, September 18, 2007 by Niels Hartvig

Casey Neehouse made minutes from todays chat - thanks:

<minutes>
Participants:
Niels Hartvig, Per Ploug Hansen, John Cruz, Casey Neehouse, Bob Baty-Bar, Morten Bock, Søren Sprogoe, Daniel Bjørnbakk, Kenneth Sølbergø, Jesper Ordrup, John Hodgkinson, DouglasRobar, Ismail, Boris Masis, Warren Buckley, Christian Palm, Ryan Roberts, Sean McGonagle, Simon Justesen, Christian Sparre

Chat Notes:
Introductions all around...
Discussion of expectations:
  Morten - to gain knowledge of the roadmap and how it will be executed.
Soren - no real expectations - just wants to stay up to date.  Ideas for the website.
  Niels - to see who to get involved.
  John H. - no expectations either
  Per - to get feedback

Niels informed us that Microsoft Germany has provided an MSI installer.  This will provide a simplified means to install umbraco for novice users by checking for prerequisites such as ASP.NET 2.0, AJAX.NET, SQL Server, Set up IIS site, and build necessary connection strings.

Per and Niels started refactoring the umbraco UI yesterday.  YUI was chosen for the foundation, with scriptaculo-us for effects.  ASP.NET AJAX controls for client/server communications with script-enabled web services.
The whole UI will be rewritten to be based off of YUI.

With sponsorship (anyone interested), there will be an effort to implement an Accessible interface as well.
Casey brought up control refactoring, which brought in several comments, and created need for an additional topic.  Validation became a major point of discussion, and control configuration was mentioned.  To be revisited later....

Per provided us some screenshots of the new UI, and explained some of the more important changes:

  • The create button becomes a menu, allowing for the user to create new items from any of the sections. 
  • Also, the Sections have been moved into a section menu as well, creating more room for the tree.
    Create menus and Section menus will both support shortcuts, in which you can drag items from the content tree to the menu to create shortcuts to common locations.  This will be user-based (possibly global/group shortcuts as well).
  • Per also discussed the new internal search.  Search will integrate Auto Suggest features for node names as well as search across different sections.  There will be an advanced search that will allow you to search into more detailed metadata.  There will also be a means to save Searches to allow for easy search at later times.   There will also be an API to allow extensions to become searchable, allowing you to easily have umbracoo insert the data into the index.
  • Niels explains how the search would be savable, or Instant Dashboards could be created.
  • Back to UI, there will be a few widgets globally available.  First of which is Modal Dialogs, Panels (for the Speech Bubble), and simple dialogs.
  • The tree will be rewritten to allow for drag-n-drop moving, copying, and sorting.  The context menus will be extended to allow for custom actions as well.

John Cruz has started implementing Membership Providers to allow for support of LDAP/AD, and your custom member DB for authentication.  This should be released in v 3.1.

Back on topic of the Editor Controls, Default Values, Better Validation Controls, and Configuration methods.  Discussions varied between approaches, but the consensus led to a property editor interface for DataType settings, and string values and key/value collections interfaces for Document Type settings.  Due to lack of Volunteers, this will be placed on a wish list.

The chat then moved to templates, and the possible use of Master Pages in place of the built-in template system.  Discussion was mixed about the effectiveness of such implementation.  Research will be given to see the effectiveness.

Action Handlers were next discussed, as they will be moved to the CMSNode class, to allow for global inheritance.  Thus, most items in umbraco will be able to use actionhandlers.  Also, some other API changes to allow for extensions to self register, versus the database table approach.

Moving on to the repository, Niels nominated Bob, Doug, Warren, and Casey to act as a team to get that up to par.  A form to allow for package submissions would be available for install/testing/approval.
Package discussion also went into Upgrades and Uninstalls.   Uninstalls scare Niels, so, the conversation was postponed...  Uninstalls by practice could be very dangerous, and could break a lot of things, so, they should be taken lightly.

Help came to discussion, and a team will be formed to handle basic help as well.

I am sure I missed some stuff....
</minutes>

Casey, you didn't miss much but next chat will be October 9th 19.00 GMT+1. The room will be open on the same url for anyone to use, so feel free to use it to discuss something that would take too long on the forum. Also; look in the forum on Tuesday around 19.00 GMT+1 - could be fun to have some regular stuff going on.

Remember the developer chat tonight

Tuesday, September 18, 2007 by Niels Hartvig

Remember the developer chat tonight about the future development and roadmap for 3.x. The "official topic" is
"Talking about the roadmap and who's interested in contributing"

Url to the chat will come here 20 minutes prior to the chat. Please notice that seats are limited (25), so please only participate if you'll contribute. Minutes will be published after the chat for everyone who's curious.

"See" you in about two hours!

Per and Niels

Update: If you wish to add topics to the agenda, please add them in the comments

To access the chat:

Visit our campfire chat room. When you access, you cannot see what's previously been going on for some awkward reason, but everything will be published later. To make the chatting process as simple as possible, please follow these rules:

  1. The main topic is to start a collective development process of umbraco, as open and inviting as possible
  2. Stay true to the current topic - the format makes it hard to discuss multiple topics
  3. The first 15 minutes is for saying hello and suggesting further topics. If you come after 19.15 GMT+1, then just follow the chat and add something when it stays in-sync with the topic . Starting with a "Hi all" can be pretty annoying even though it's meant in a good way :-)
  4. Agenda is:
    1. 19.00 - 19.15: Welcome, chit-chatting, saying hi and suggesting topics
    2. 19.15 - 19.45: Presenting the current research status and what's have been done and delegated so far with discussions
    3. 19.45 - ??:??: Discussing roadmap features and who want to contribute with what.
    4. ??.??: Beer, no wait - gotta save that until codegarden '08 ;-)

Welcome John Cruz to the core team

Monday, September 17, 2007 by Niels Hartvig

It's my pleasure to welcome John Cruz to the umbraco core team. John is a C# developer from Honolulu, Hawaii and MCTS in Web development in C# and in SQL Server 2005 and currently works for Pacific Resources for Education and Learning as a Senior Web Developer. He enjoys developing web applications in C# using design patterns and test driven development.

His skills are a perfect match for planning the re-factoring of umbraco (v4), ensuring a safe process and much prettier code, but he's already started working on implementing the Membership Provider model for v3.1.

Give him a warm welcome!

Roadmap (wish list) and developer chat on future umbraco versions

Wednesday, September 12, 2007 by Niels Hartvig

Next week, Per and I will spend three wonderful days to start the initial development of umbraco 3.1 (primarily with focus on the UI re-factoring). But improving umbraco shouldn't be a closed process and with arms wide open we'll invite you to join.

As very initial work, we've created a wish list of stuff we'd like to see added to umbraco 3.x - not necessarily in v3.1 but in the v3.x life cycle. Consider it a work-in-progress roadmap with the most important major updates loosely described.

We hope that you'll read it and give feedback in the comments, but we'll also encourage you to discuss it with your customers/end-users so they could add improvements too. After all, they're the people who use the tool almost everyday. When adding ideas in the comments, please spec them with a couple of sentences in the same style as in the roadmap.

On Tuesday at 19.00 GMT+1 we'll arrange a chat to discuss our ideas as well as the ones submitted in the comments (download as an ICS reminder for Outlook/gCal).

When we've collected all the ideas, we'll arrange a poll for developers and a poll for editors to get an idea on how to prioritize (think Dell Ideastorm).

[1] umbraco 3.x wish list / roadmap (.pdf)
[2] Developer chat reminder file (.ics)

Microsoft Live Writer beta 3 released and 100% umbraco compatible

Wednesday, September 12, 2007 by Niels Hartvig

As you might have seen, Microsoft just released the 3rd beta of Live Writer, and I'm pleased to announce that it's 100% compatible with umbraco v3. A part from being gentle to blogging, Live Writer let's you create and edit pages in umbraco using the neat new "Content Channel" concept in v3.

So instead of using a web based interface, you can use a nice Windows application which also makes it possible to edit pages offline and even do spell checking. It also supports embedding images which are uploaded to the umbraco media library, like this screenshot:

image

Highly recommended and did I mention that it's a free download?

New dates for umbraco training ready

Monday, September 03, 2007 by Niels Hartvig

If you missed the fabulous umbraco training previous week, here's some good news. We'll be running umbraco training again on October 11-12th. Seats are limited this time, so don't wait to long to order. As always there's two courses - here's a little topic appetizer:

Level 1 - implementing websites using umbraco:
  • Understanding the umbraco basics - Document Types, Templates and Macros
  • Creating a simple website from scratch
  • Understanding XSLT - creating a news "module"
  • Creating multi-language websites including coverage of Dictionary Items and Languages
  • Advanced properties: Re-use of properties and recursive usage of properties
  • Two-way feedback using AutoForms and Notifications
  • Great Packages: Implementing full-text searching and mail forms

Level 2 - umbraco for .NET Developers, extending and integrating solutions

  • Usage of .NET User Controls with umbraco
  • Debugging .NET Controls with umbraco
  • In-depth explanation of the umbraco object model and usage of the umbraco presentation APIs
  • Creating, importing and modifying content from .NET using the API
  • Extending XSLT with custom .NET classes
  • Usage of AJAX and umbraco
  • Custom event handling in umbraco using ActionHandlers
  • Walkthrough of Members and their APIs

Full details on training as well on how to order at the training section.

Finally a book on installing umbraco on Windows XP

Monday, August 27, 2007 by Niels Hartvig

Douglas Robar did it again - took the time to write yet another of his amazing and detailed books on how to install umbraco. Following the series that already includes installing 3.x on Vista and 2.x and XP comes a long waited guaranteed  bestseller: Installing umbraco 3.x on Windows XP.

It's probably the most comprehensive guide to installing a piece of software ever made - nothing is missed. Even guides on how to install pre-requisites are explained step-by-step with screenshots included. You can even print the complete install guide, by clicking the print link on the home page of the book.

Doug, you're simply amazing - this will help a lot.

Dougla