At the moment it feels like I am re-designing a navigation system that has probably already been built before. The reason for saying this is because the navigation controls provided to you by Visual Studio 2008 produce table-based layouts, which is not what I want for my website. I want my website to generate valid XHTML and use CSS for layout. So what do I need? I need a navigation system that generates valid CSS and XHTML and that is easy to administer and update without having to meddle in C#, XHTML or CSS code. How do I achieve this goal? Would I have to write my own custom navigation system? It seems so for now. The basic structure of the navigation system would allow for a maximum of three levels of navigation:
- A top level
- A second level
- A third level
The navigation system will at all times make the user aware of where they are in the website, which can be achieved with a breadcrumb navigation system. Each navigation item will display its own associated content. Second level navigation items will have top level navigation item parents and third level navigation items will have second level navigation item parents. The navigation system will also act as a source for creating the site map structure. If a visitor clicks on any item in the top navigation area then content associated with that item will be displayed and the active top level navigation item will show its active. The second level navigation items that are displayed will be associated with the top level item. If a visitor clicks any of the second level navigation items the one that is clicked will become active and content associated with the second level navigation item will be displayed and the second level navigation item that is clicked will show that is active. If the second level navigation item has third level navigation items associated with it then those items will be displayed. If a visitor clicks on the third level navigation item then that item becomes active and content for it will be displayed and that third level item shows that it is active.
The next step is to create an object-oriented design from this structure. Using an object-oriented approach would allow for easy re-use throughout. So lets say we create a class called “section” and give it the following fields:
- ParentSectionField – This will indicate if there is a parent item
- SectionField – This will indicate what the current section is
- SectionHierarchy – This will indicate where in the navigation hierarchy the section item belongs.
The other issue that is a concern for me is content management, and understanding why it is important. Content management is important because it alleviates the need to mess with the code in your website. If your website has a decent content management system you will have a consistent look and feel throughout the website and you will be able to change that look and feel with a few clicks. WordPress is a perfect example of just that. WordPress allows you to easily change themes by uploading it to a directory and by changing it in your admin panel. WordPress is a clear example of design being a layer on top of the underlying function. Content management systems are ideally defined as a layer of functionality or business logic with another layer of presentation logic on top of that. Content management systems are also characterised by its development frameworks. Development frameworks can be seen as large collections of functionality assembled into one component. ASP.NET is an example of a framework technology, because it provides a whole host of features and functionality that you do not have to re-develop to make use of. The ASP.NET Roles and Membership functionality comes to mind, and is not too difficult to implement and administer without having to write much code. The advantage of this is that these features take advantage of the framework features across the whole website. The Roles and Membership feature in ASP.NET is an example of this, because you could easily manage more than one website’s user base from a central administrator control panel. You would not have to re-code the model for each website.