Ok I can see there is some confusion here -
There are SkinObjects also known as Tokens when working with DNN and there are ContentPanes which are totally separate.
The SkinObject Tokens are surrounded by [CURRENTDATE] [LOGIN] etc. They form a relationship between the developer and designer by enabling you to enhance the dynamic functionality of the site and it's visual appearance.
Here's an example - You know the date is rendered by DNN, you don't want to change that, but you do want to change how the text looks and how it is displayed. If you work in html method of skinning, you need to put in the [CURRENTDATE] token, but in your xml file you need to configure the date format if you want to to display anything other than the standard layout. SkinObjects create more functionality and a relationship between the developer and designer.
However, CONTENT PANES - are simply the holders of module information. They have no relationship with the SkinObject and must be treated differently.
So you need to have a few hats on when working with your skin.
- One hat that says- how and where I want the dynamics like the date, login, copyright, etc, to be sitting in the skin
- One hat that says - how I want these thing to look
- And one hat that says- where do I want the module to be placed and displaying using the ContentPane references
You do not have to use a td tag to place you content panes in. You can also use div tags and place in different locations, but the correct format must be there so that you can have it appear in the dropdown box.
And remember - no duplicates.
Skinning is a multi faceted application. Because in between all that you need to work on making it look good and work in different browsers. But it's one of the most exciting parts of dotnetnuke that I've seen..
I hope this clarifies a few things for you. And on another note - I'm currently working on a Starter Kit skin for DNN4, I need a little help along the way from a couple of developers to test and get it packaged correctly.
Nina Meiers