You can do a limited amount of customization through the browser, you can also customize the look and feel by applying a different theme to your site. What you couldn’t do using either methods, was change the layout completely – basically make a SharePoint 2007 site look absolutely not like a SharePoint 2007 site.
Now I’ve actually done this at work, but I cannot share the screenshots with you L. What I can share with you are SharePoint tips and tricks in making this happen.
Meet your new friend – The SharePoint Designer 2007.
The SharePoint designer 2007 will let you open a site, and edit it to your heart’s content. But it is important to understand that SharePoint 2007 pages based on a master pages concept. As an ASP.NET 2.0 developer you are probably very familiar with the master page concept, but here is a quick image to explain what a master page does to your site.
Basically, you create a master page where you define common UI and code, and throw in one or more ContentPlaceHolders. ASPX pages can then specify that page as the master page, and optionally choose to override the ContentPlaceHolders placed in the master page. If they choose to override, the content defined in the page will appear, else the content in the master page will appear.
Thus you can edit your site, by editing individual pages, or the master page. This is a huge improvement over 2003 since in 2003 all your custom UI changes were scattered all over the map.
You can begin editing your site through SharePoint Designer. The easiest way to open a site in SharePoint designer is File à OpenSite à Http://yoursite:someportnumber. It is important to realize that if you have a custom forms based authentication enabled, this will probably fail. That is not such a huge problem as you should be applying consistency between your sites using site templates anyway – this is a topic for a different day.
Now, how does page parsing and editing work in SharePoint.
When you open the site in SharePoint designer, you would see something like this –
The master pages are under the _catalogs/masterpage gallery. You should see a default.master there. You can choose to modify that masterpage, or you could create a new master page. It is very important to realize however that newer objects created on the SharePoint site, such as lists, document libraries, pages or even child sites and site collections leverage the same master page library. So when you do create a brand new master page, you must right click on that, and set that as your custom master page going forward. Thus, when you create a new list, “Announcements”, SharePoint will ensure that it uses your custom master page for its various aspx pages, rather than the default.master.
Alternatively you can choose to modify the default.master.
It is nearly impossible to squeeze every bit of knowledge regarding customization in a single blogpost, maybe I’ll write a 2000-4000 word article on that in some magazine in the future. Heck to describe everything in this topic, you could probably write a couple of chapters in a book, but maybe some other day.
But for this blog post, here are a few salient points.
a) Don’t knock off any placeholders. Also, don’t knock off any ContentPlaceHolders that are already present in default.master. If you do so, you will find that certain features & objects rely on certain ContentPlaceHolders, and as and when you stumble upon those features & objects, SharePoint will kick and scream (basically throw an error) everytime you use a feature & objects that relies on a specific ContentPlaceHolder that you knocked off. So in short, know and learn the role of each ContentPlaceHolder, and keep them in the page. I couldn’t find a good documented list of ContentPlaceHolders to feature & objects mapping – so I just go by what was already there in default.master. So far it’s worked pretty well for me.
b) You can right click on the design surface of the master page, and see the following menu.
Clicking on that menu item will give you a convenient view of managing all existing Content Regions inside the master page (seen below):
c) Finally, it is important to understand how ASP.NET 2.0’s virtual page parsing works with SharePoint. When you customize either aspx’es or .master files, you are not modifying anything on the file system. All you are doing is, you are making changes in the database. At first hit, SharePoint/ASP.NET combine what is present on the file system, alongwith the delta changes you made, and present a single combined ASPX to the ASP.NET runtime. This then goes through the ASP.NET pipeline like a regular page.
There are two huge advantages to this, you can not only clearly view the pages that are indeed customized with a little exclamation mark right next to them -
In fact you could even do check-in and check-out of individual files, and you can even revert to a previous version.
Secondly, say in the case of the master pages, they are in a document library under Site Actions à Site Settings/ Galleries/Master pages. And under Document Library Settings, you can specify stuff like versioning settings, custom workflows, and a whole number of things typical to any document library.
d) A very important thing to realize is that only some of the aspx/master pages are fully integrated into this new database oriented ghosting/unghosting scheme. All images, many user controls, and many “admin level” pages are shared amongst all sites, and they simply sit on the file system – not participate in database level ghosting unghosting. (Maybe this will change in RTM? To me it looks like a huge thing left out). Atleast in the beta versions, you can easily get around this issue by going to IIS Manager under Control Panel, and creating new virtual directories for your customized versions, and copy pasting the contents from the original folders into the customized folders.
Yes this sucks, but trust me, don’t ignore this, or all sites on the physical machine will inadvertently end up getting modified – which quite sucks in my opinion. This little advance homework will keep your life sane.
Anyway, to sum it up, customizing SharePoint through SharePoint designer is a huge topic. One thing I didn’t touch upon here was customizing the inbuilt webcontrols that come with SharePoint. For instance, if you wanted to change the look and feel of the “Site Actions” button or menu beyond what CSS and aspx changes allow, you have the option of firing up visual studio and subclassing or creating entirely new controls.
I’ll probably cover all that and more in some article I will write somewhere in the near future.