Site Definitions versus Site Templates and deciding on the correct customization approach


Site Definitions


l  A site definition is the core definition of what a site is in SharePoint.


l  A site definition is installed on file system of web front ends, located at ..\12\Template\SiteTemplates. This directory is language-neutral.


l  A site definition consists of .aspx pages and .xml files with Collaborative Application Mark-up Language (CAML).


l  A major benefit is that the Page and List definition is read locally from the file system, not from Content Database.


l  A site definition Page and List definition are cached at IIS process startup


l  Customizations made to site definition are stored in content database, not on the file system. This can be performed via SharePoint Designer, or when custom site templates are saved.


l  are developer created


l  Localization: WSS 3.0 supports full site template localization (based on ASP.Net 2.0 via XML files and .ASPX files pulling strings from RESX files. Therefore solutions can be shipped “language packs” of resource files.


l  “Global Template” defines commonality across site definitions; it gets called before any other template. It works by injecting common provisioning content into all new sites. ONET.XML file defines base types, galleries, mobile redirects


 



Site definitions 


  


·         Site Definitions and Configurations – http://msdn2.microsoft.com/en-us/library/aa978512.aspx


·         CAML – http://msdn2.microsoft.com/en-us/library/ms462365.aspx


Site Template


A site template (*.stp file) is created through the user interface or through implementation of the object model. It is a package containing a set of differences and changes from a base site definition.


 


The site template package is stored as a CAB-based file that can be downloaded or uploaded to site collections by users with the appropriate rights. As before, site templates offer a measure of portability to SharePoint Applications.


 


It is not as performant as a pure site definition as site definitions are cached on start of IIS on the web front ends while site templates are stored and hence need to be fetched from the content database and merged with the site definition code at runtime to render the site.


 


Also note that if you plan to transfer a site template to separate farm, that the farms have the same versions installed of SharePoint installed.  (hotfixes,etc.) This is due to the dependence site templates have on the original base site definition they were created from.


 


Deciding Between Site Definitions and Custom Site Templates


See : http://msdn2.microsoft.com/en-us/library/aa979683.aspx


 


When choosing whether to create a site template or a site definition, first consider the following issues:


·         Are the changes you need to make simple or complex? If, for example, you need to make only minor changes in the look of certain pages and add a few fields in particular lists, you should create a custom site template. However, if you need to create new content types, add new Web Part definitions, and significantly restructure sites, you should create a custom site definition.


·         Can you deploy changes to the front-end Web server? If you do not have access to the file system of the computers running Windows SharePoint Services, you have no choice but to create a custom site template.


 


Custom site definitions hold the following advantages over custom templates:


·         Data is stored directly on the Web servers, so performance is typically better.


·         A higher level of list customization is possible through direct editing of a Schema.xml file.


·         Certain kinds of customization to sites or lists require use of site definitions, such as introducing new file types, defining view styles, or modifying the Edit menu.


 


Site definition disadvantages include the following:


·         Customization of site definition requires more effort than creating custom templates.


·         Editing a site definition after it has been deployed is difficult.


·         Doing anything other than adding code can break existing sites.


·         Users cannot apply a SharePoint theme through a site definition.


·         Users cannot create two lists of the same type with different default content.


·         Customizing site definitions requires access to the file system of the front-end Web server.


 


Custom templates hold the following advantages over customization of site definitions:


·         Custom templates are easy to create.


·         Almost anything that can be done in the user interface can be preserved in the template.


·         Custom templates can be modified without affecting existing sites that have been created from the templates.


·         Custom templates are easy to deploy.


 


Custom template disadvantages include the following:


·         Custom templates are not created in a development environment.


·         Custom templates are less efficient in large-scale environments.


·         If the site definition on which the custom template is based does not exist on the front-end server or servers, the custom template does not work.

Comments (9)

  1. petronella mhishi says:

    Hi

    You can create custom templates in development . You need to deploy them see example of how to deploy a list template here

    You can also do the same for site templates

    http://www.sharepointblogs.com/tonstegeman/archive/2007/07/10/deploy-a-sharepoint-list-template-to-sharepoint-mysites.aspx

  2. Ven says:

    Excellent Article …Hats-off.. Looking forward to more articles like this from you in future

  3. Chalapathi says:

    Hello,

    As part of SharePoint rollout in our company, we are in the process of developing custom site definitions/templates for team sites, project sites etc…

    We understood that new site definitions/templates required configuration (adding new views to lists, adding webparts to pages etc) can be built in three ways. They are

    Custom site template (do all the required configuration in a site and store it as .stp file to be used to recreate sites)

    Custom site definition (do all the required configuration in onet.xml of a custom site definition in 12 hive)

    Feature ( do all the required configuration in a dll through object model and attach the dll to Feature, to be called when a new site is created using Feature site template association)

    Instead of preferring option 2. above, we are leaning more towards option 3. (actually combination of 2. and 3. with bare bones site definiton) as this would help change the site definition ( by changing the dll) without touching the site definition files in 12 hive ( best practice from MS is not to touch the site definition files in 12 hive once site collections are created). This would help us in the version management of site definitions.

    But while preferring option 3., we are facing some challenges in doing the required configuration (changing some webpart settings) through code.

    So, do you have any idea if combination of 1. and 3. will be robust enough? By combination, I mean doing most of the changes in the custom template (option 1. above) and include some changes into Feature (option 3.) which are not doable through custom template.

    From the best practice perspective, do you suggest the above combination of 1. and 3. or you think it is better to go with 2. and 3. (with all the configuration done through code and just a bare bones site definition in 12 hive – this would require more time to resolve our challenges but will prefer if this is the best way to go.)?

    With Regards,

    Chalapathi

  4. Florin says:

    Very nice post, however a few comments:

    I agree with you that site definition are harder to develop but I do not agree that it is difficult to change after it has been deployed. I say this mainly thinking at feature stapling (I have seen on the MS site that changing site definitions already in use is not supported fo feature stapling is the only solution left :)).

    I always leave the onet.xml file blank and I only set the list of site/web features to be activated by default. By doing this I have never seen the issue you mentioned about 2 lists of the same type (I have never tried using SharePoint themes directly in the site definition, but I think it should be possible).

    Also, 3 important points about site definitions/templates comparison :

    • site templates cannot be multilingual

    • you cannot create a site template from a publising site (actually it works, if you use the correct Url but I think it is not supported, the link to create a site template is removed in the site admin page)

    • you cannot create a site template for the root site of a site collection (at least I haven’t found a way to do it)

    • using site templates require extra work when working with multiple site collection/web application (you have to manually/automatically deploy the .stp files in the gallery)

  5. Excellent Post..This is what I was looking for.. Thanks

  6. Live Site Templates awesomeness . says:

    Recently I was in need to create a live running SharePoint template site that was supposed to be a site template for any future site collections creations.

    Hence it was a multi-site collection environment. So after setting up this Live Template for site. I created a custom web part that is creating site collection and reading the template file from solution gallery of site template and then doing any other operations need via code.

    My client finds it an awesome solution and praise for it. Initially it was planned to develop a Site Definition with time estimate of 200hrs.

    Using this live template saved a lots of time and effort.

    I am also planning to codeplex this site collection provisioning using live site templates.

    BR

    faisal

    Stockholm

  7. faisal rafique says:

    Recently I was in need to create a live running SharePoint template site that was supposed to be a site template for any future site collections creations.

    Hence it was a multi-site collection environment. So after setting up this Live Template for site. I created a custom web part that is creating site collection and reading the template file from solution gallery of site template and then doing any other operations need via code.

    My client finds it an awesome solution and praise for it. Initially it was planned to develop a Site Definition with time estimate of 200hrs.

    Using this live template saved a lots of time and effort.

    I am also planning to codeplex this site collection provisioning using live site templates.

    😉

  8. DS27 says:

    @faisal: what do you mean with "live template" or "live site template" ?

    I have a similar challenge 🙂

    Best regards

    Dominik