Master Pages e Content Place Holders

Uma das razões pelas quais customizar o aspecto do WSS v3 (operação também designada por branding) é muito mais simples do que na versão anterior, é o facto de este utilizar Master Pages. Basicamente, uma master page é um ficheiro .aspx (mas com extensão .master) que serve de base às páginas de um site (estas com extensão .aspx). Funcionam um pouco como os templates do Powerpoint em que podemos definir um Slide Master e depois, em cada novo slide que criarmos, só precisamos de preencher os espaços com conteúdos. Neste caso o que fazemos é criar uma master page, na qual colocamos controlos ASP.Net do tipo ContentPlaceHolder. Em todas as páginas que forem baseadas nessa master page, só precisamos de escrever o conteúdo desses place holders através também de um controlo ASP.Net: o Content.

Quando é pedida uma página destas ao servidor web, este encarregar-se-á de ir buscar a master page e preencher os espaços dos place holders com o código colocado página requisitada dentro dos controlos Content, criando assim a página final que é depois transmitida ao browser cliente. A grande vantagem deste mecanismo é a reutilização de todo o código que se repete em todas as páginas de um site facilitando muito a manutenção do mesmo.

Em SharePoint, um site utiliza duas master pages:

  • A Site Master Page, que é usada nas páginas de publishing e portanto normalmente alvo de mais customização; e
  • A System Master Page, que é usada nas páginas de configuração e listas que muita vezes não estão acessíveis aos utilizadores comuns do portal.

Uma das primeiras tarefas que são executadas no branding de um site em SharePoint é a criação de novas Master Pages que darão o aspecto desejado a todo o portal. No entanto, há que ter em conta que, ao mudarmos a master page de um site, todas as páginas existentes vão passar a usar a nova master page. Ou seja, vão colocar conteúdos nos place holders que esta define e que, se lá não estiverem, causarão um erro de execução no site.

Para poupar trabalho a quem queira saber quais são os place holders que tem que colocar (nem que seja num asp:panel invisível) nas suas master pages, coloco abaixo uma lista.

Na Site Master Page:

  • PlaceHolderPageTitle
  • PlaceHolderAdditionalPageHead
  • PlaceHolderLogin
  • PlaceHolderSearchArea
  • PlaceHolderTitleBreadcrumb
  • PlaceHolderLeftNavBar
  • PlaceHolderPageTitleInTitleArea
  • PlaceHolderMain
  • PlaceHolderPageImage
  • PlaceHolderBodyLeftBorder
  • PlaceHolderNavSpacer
  • PlaceHolderTitleLeftBorder
  • PlaceHolderTitleAreaSeparator
  • OSSConsole
  • PlaceHolderMiniConsole
  • PlaceHolderCalendarNavigator
  • PlaceHolderLeftActions
  • PlaceHolderPageDescription
  • PlaceHolderBodyAreaClass
  • PlaceHolderTitleAreaClass

Na System Master Page:

  • PlaceHolderPageTitle
  • PlaceHolderAdditionalPageHead
  • PlaceHolderSiteName
  • PlaceHolderSearchArea
  • PlaceHolderTopNavBar
  • WSSDesignConsole
  • SPNavigation
  • PlaceHolderTitleLeftBorder
  • PlaceHolderTitleBreadcrumb
  • PlaceHolderPageTitleInTitleArea
  • PlaceHolderMiniConsole
  • PlaceHolderTitleRightMargin
  • PlaceHolderTitleAreaSeparator
  • PlaceHolderLeftNavBarDataSource
  • PlaceHolderCalendarNavigator
  • PlaceHolderLeftNavBarTop
  • PlaceHolderLeftNavBar
  • PlaceHolderLeftActions
  • PlaceHolderNavSpacer
  • PlaceHolderLeftNavBarBorder
  • PlaceHolderBodyLeftBorder
  • PlaceHolderPageDescription
  • PlaceHolderMain
  • PlaceHolderBodyRightMargin
  • PlaceHolderFormDigest
  • PlaceHolderUtilityContent
  • PlaceHolderBodyAreaClass
  • PlaceHolderTitleAreaClass