Compartilhar via


Atualizar a identidade visual de sites e regiões de página existentes do SharePoint

Você pode atualizar a identidade visual em seus sites e coleções de sites existentes do SharePoint, bem como personalizar regiões das páginas do SharePoint. Faça isso, por exemplo, ao atualizar para uma nova versão do site.

Importante

Essa opção de extensibilidade está disponível apenas para experiências clássicas do SharePoint. Você não pode usar essa opção com experiências modernas no SharePoint Online, como nos sites de comunicação.

Atualizar a identidade visual de sites e subsites existentes

O exemplo branding.refresh no projeto padrões e práticas do desenvolvedor Office 365 no GitHub mostra como usar a biblioteca OfficeDevPnP.Core para iterar em sites e subsites existentes para verificar e atualizar a identidade visual aplicada. O exemplo mostra como atualizar a identidade visual do site, mas o mesmo conceito pode ser usado para fazer outras coisas, como implantar uma nova biblioteca em uma lista de sites ou atualizar uma ação personalizada que foi implantada durante o provisionamento. Você pode usar o mesmo processo para mover sites existentes para uma nova versão.

A operação tem duas etapas:

  • Fazer com que os sites desejados sejam atualizados.
  • Atualize a identidade visual do site.

Obter os sites que você deseja atualizar

Primeiro, obtenha uma lista de sites e subsites que deseja atualizar. O exemplo mostra como fazer isto usando o recurso de pesquisa, mas há outras opções, como ler a partir de um diretório de sites ou fornecer uma interface de usuário de gerenciamento em que os administradores podem especificar a lista. O exemplo a seguir mostra como usar o recurso de pesquisa para gerar a lista.

// Get a list of sites. Search is one way to get this list, an alternative can be a site directory.
List<SiteEntity> sites = cc.Web.SiteSearchScopedByUrl("https://bertonline.sharepoint.com");

// Generic settings (apply changes on all webs or just root web).
bool applyChangesToAllWebs = true;

// Optionally further refine the list of returned site collections.
var filteredSites = from p in sites
                    where p.Url.Contains("13003")
                    select p;

List<SiteEntity> sitesAndSubSites = new List<SiteEntity>();
if (applyChangesToAllWebs)
{
  // You want to update all sites, so the list of sites is extended to all subsites.
  foreach (SiteEntity site in filteredSites)
  {
    sitesAndSubSites.Add(new SiteEntity() { Url = site.Url,
                                            Title = site.Title,
                                            Template = site.Template });
    GetSubSites(cc, site.Url, ref sitesAndSubSites);
  }
  sites = sitesAndSubSites;
}

A chamada para GetSubSites é recursiva, portanto, busca a árvore subsite. Após a árvore ter sido recuperada, verifique se a quantidade retornada está correta antes de continuar.

Atualizar a identidade visual

Após selecionar um site para processar, use os métodos OfficeDevPnP.Core para manipular o site. O exemplo mostra como fazer isso para a identidade visual do site, mas é possível processar qualquer tipo de alteração da mesma forma.

O exemplo usa um padrão que utiliza o recipiente de propriedades da Web para armazenar informações sobre as configurações atuais. O código lê primeiro os valores do recipiente de propriedades Web e, então, age de acordo com cada valor.

// Verify that you have a property bag entry.
string themeName = cc.Web.GetPropertyBagValueString(BRANDING_THEME, "");

if (!String.IsNullOrEmpty(themeName))
{
  // If no theme property bag entry, assume no theme has been applied.
  if (themeName.Equals(currentThemeName, StringComparison.InvariantCultureIgnoreCase))
  {
    // The applied theme matches to the theme you want to update.
    int? brandingVersion = cc.Web.GetPropertyBagValueInt(BRANDING_VERSION, 0);
    if (brandingVersion < currentBrandingVersion)
    {
      DeployTheme(cc, currentThemeName);
      // Set the web propertybag entries
      cc.Web.SetPropertyBagValue(BRANDING_THEME, currentThemeName);
      cc.Web.SetPropertyBagValue(BRANDING_VERSION, currentBrandingVersion);
    }
  }
  else
  {
    if (forceBranding)
    {
      DeployTheme(cc, currentThemeName);
      // Set the web propertybag entries.
      cc.Web.SetPropertyBagValue(BRANDING_THEME, currentThemeName);
      cc.Web.SetPropertyBagValue(BRANDING_VERSION, currentBrandingVersion);
    }
  }
}

O código que atualiza o tema é simples e baseado em métodos OfficeDevPnP.Core.

string themeRoot = Path.Combine(AppRootPath, String.Format(@"Themes\{0}", themeName));
string spColorFile = Path.Combine(themeRoot, string.Format("{0}.spcolor", themeName));
string spFontFile = Path.Combine(themeRoot, string.Format("{0}.spfont", themeName));
string backgroundFile = Path.Combine(themeRoot, string.Format("{0}bg.jpg", themeName));
string logoFile = Path.Combine(themeRoot, string.Format("{0}logo.png", themeName));

if (IsThisASubSite(cc.Url))
{
  // Retrieve the context of the root site of the site collection.
  using (ClientContext ccParent = new ClientContext(GetRootSite(cc.Url)))
  {
    ccParent.Credentials = cc.Credentials;
    cc.Web.DeployThemeToSubWeb(ccParent.Web, themeName, spColorFile, spFontFile, backgroundFile, "");
    cc.Web.SetThemeToSubWeb(ccParent.Web, themeName);
  }
}
else
{
  cc.Web.DeployThemeToWeb(themeName, spColorFile, spFontFile, backgroundFile, "");
  cc.Web.SetThemeToWeb(themeName);
}

Personalizar regiões de uma página do SharePoint

Quando seu objetivo é personalizar regiões de uma página do SharePoint, você pode usar uma combinação de provisionamento remoto e CSS (planilhas de estilo em cascata) personalizadas em arquivos associados a regiões da página. Inicialmente, então, você deve estar ciente de quais arquivos do SharePoint estão associados às várias regiões de uma página do SharePoint.

Tabela 1. Regiões de página do SharePoint e arquivos associados

Região da página Arquivos associados Mais informações
Ribbon Qualquer das páginas mestras padrão. CSS correspondente:
  • Corpo principal – corpo: #s4-workspace
  • Barra de suíte – à esquerda: #suiteBarLeft
  • Barra de suíte – à direita: #suiteBarRight
  • Contêiner de faixa de opções: #globalNavBox
Pode ser ocultado com o botão Foco no Conteúdo.
Navegação de pacote Qualquer das páginas mestras padrão. Pode ser ocultado com o botão Foco no Conteúdo.
Links de pacote Pode ser ocultado com o botão Foco no Conteúdo.
Menu de boas-vindas *. master Pode ser ocultado com o botão Foco no Conteúdo.
Menu de configurações (engrenagem) *. master
Ajuda *. master
Guias de contexto da faixa de opções Qualquer página mestra padrão. Para ver exemplos, consulte o seguinte:
Barra de ferramentas de acesso rápido *. master Pode ser ocultado com o botão Foco no Conteúdo.
Logotipo do site *. master

CSS correspondente: .ms-sitelcon-img
Navegação superior Navegação CSOM/JSOM

*. master

CSS correspondente (fora do modo de edição):
  • Novo Item selecionado: .ms-core-listMenu-horizontalBox li.static > .ms-core.listMenu-selected
  • Novo item Hover: .mscore-listMenu-horizontalBox li.static > a.ms-core-listMenu-item:hover
  • Seta do flyout: .ms-core-listMenu-horizontalBox .dynamic-children.additional-background
  • Item nav (correspondente a itens de menu de nível superior): .ms-core-listMenu-horizontalBox li.static > .ms-core-listMenu-item
  • Item flyout: ul.dynamic .ms-core-listMenu-item
  • Contêiner de flyout: ul.dynamic
  • Editar links: .ms-navedit-editLinksText > span> .ms-metadata
CSS correspondente (no modo de edição):
  • Link do modo de edição do nav: .ms-core-listMenu-horizontalBox .ms-core-listMenuEdit > tr > .msnavedit-linkCell > .ms-core-listMenu-item
  • Adicionar Link: .ms-core-listMenu-horizontalBox a.ms-navedit-addNewLink
Título da página CSS correspondente (no modo de edição):
  • Título da página e título da página com link: .ms-core-pageTitle, .ms-core-pageTitle a
  • Botão Descrição: #ms-pageDescriptionDiv
  • Caixa de descrição: .js-callout-mainElement
  • Seta da caixa de descrição: .js-callout-beak
  • Texto de descrição: .js-callout-body
Caixa de pesquisa Nav CSOM/JSOM *.master CSS correspondente:
  • Borda da caixa de pesquisa: .ms-srch-sb-border
  • Mouse de borda da caixa de pesquisa: .ms-srch-sb-border: hover
  • Borda da Caixa de Pesquisa quando clicada: .ms-srch-sb-borderFocused
  • Caixa de texto de entrada da caixa de pesquisa: .ms-srch-sb-borderFocused
  • Corpo da caixa de pesquisa: .ms-srch-sb
  • Caixa de texto de entrada da caixa de pesquisa: .ms-srch-sb-searching
  • Pesquisar
Navegação à esquerda Nav CSOM/JSOM *.master Para saber mais, veja:
Exibição em árvore *. master Para obter mais informações, consulte Como personalizar o navegador interno do Treeview.
Conteúdo da página Página Layout/Páginas de Conteúdo

Zona da Web part/web partsCorresponding CSS (web part zone e Web Part):
  • Zona da Web Part: .ms-webpart-zone
  • Titular da Web Part: .ms-webpartzone-cell
  • Título da Web Part: .ms-webpart-titleText
  • Título da Web Part com link: .ms-webpart-titleText > a
  • Corpo da Web Part: .ms-WPBody
Para obter mais informações, confira Criar um layout de página no SharePoint

Para obter exemplos relacionados à personalização de regiões de uma página, consulte o seguinte no projeto Office 365 Padrões e Práticas do Desenvolvedor no GitHub:

Espaços reservados de conteúdo "mínimo" necessários em páginas padrão do SharePoint master

Sharepoint. master páginas exigem que você use espaços reservados de conteúdo, que renderizam o conteúdo básico e os elementos estruturais que uma página do SharePoint precisa para dar suporte ao ciclo de vida da página. A Tabela 2 lista e descreve os espaços reservados de conteúdo.

Tabela 2. Espaços reservados de conteúdo necessários mínimos para uma página de master do SharePoint

Espaço reservado de conteúdo Reserva espaço para
PlaceHolderAdditionalPageHead Itens adicionais na \<head\> seção de uma página.
PlaceHolderBodyAreaClass Estilos adicionais no cabeçalho da página.
PlaceHolderBodyLeftBorder O elemento de borda esquerda para o corpo da página.
PlaceHolderBodyRightBorder O elemento de borda direita para o corpo da página.
PlaceHolderCalendarNavigator Um seletor de datas para navegar por um calendário quando este fica visível em uma página.
PlaceHolderFormDigest O controle de segurança "digestão de formulários".
PlaceHolderGlobalNavigation A trilha na navegação global (navegação superior).
PlaceHolderGlobalNavigationSiteMap O mapa do site na navegação global (navegação superior).
PlaceHolderHorizontalNav O menu da navegação superior de uma página (navegação superior).
PlaceHolderLeftActions A área de navegação inferior à esquerda (navegação à esquerda).
PlaceHolderLeftNavBar A área de navegação à esquerda (navegação à esquerda).
PlaceHolderLeftNavBarDataSource A fonte de dados do menu de navegação à esquerda (navegação à esquerda).
PlaceHolderLeftNavBarTop A área de navegação superior à esquerda (navegação à esquerda).
Placeholdermain O principal conteúdo da página (conteúdo da página).
PlaceHolderMiniConsole Comandos da página, como Editar Página, Histórico e Links de Entrada em uma página wiki da empresa.
PlaceHolderNavSpacer A largura da área de navegação à esquerda (navegação à esquerda).
PlaceHolderPageDescription Descrição do conteúdo da página.
PlaceHolderPageImage Ícone de página no canto superior esquerdo da página (faixa de opções).
PlaceHolderPageTitle O título da página (\<title\>) (Título da Página) exibido na barra de título da página do navegador.
PlaceHolderPageTitleInTitle O título da página (título de página) imediatamente abaixo da trilha de navegação.
PlaceHolderQuickLaunchBottom Parte inferior da navegação do Início Rápido (navegação superior).
PlaceHolderQuickLaunchTop Parte superior da navegação do Início Rápido (navegação superior).
PlaceHolderSearchArea Área em que a o controle da caixa de pesquisa aparece (caixa de pesquisa).
PlaceHolderSiteName O nome do site (navegação de pacote).
PlaceHolderTitleAreaClass A área de título da página (navegação de pacote).
PlaceHolderTitleAreaSeparator Sombras na área de título (navegação de pacote).
PlaceHolderTitleBreadCrumb Área de conteúdo da trilha de título.
PlaceHolderTitleLeftBorder A borda esquerda da área do título (navegação de pacote).
PlaceHolderTitleRightMargin A margem direita da área de título (navegação de pacote).
PlaceHolderTopNavBar A área de navegação superior (navegação superior).
PlaceHolderUtilities Conteúdo adicional que deve aparecer na parte inferior da página (conteúdo de página).
Spnavigation Inclui operações de navegação.
WSSDesignConsole Os controles de edição de página quando a página está no modo de edição.

Se você remover um dos espaços reservados de conteúdo listados na Tabela 2 de um SharePoint . master página, o SharePoint lançará um erro. É possível adicionar um espaço reservado de conteúdo com visibilidade oculta, o que o esconde dos usuários.

Para obter mais informações, consulte Windows SharePoint Services Páginas Mestras Padrão (este artigo descreve a funcionalidade em SharePoint Services 3, mas o conteúdo ainda se aplica). Consulte também Trabalhar com controles de espaço reservado de conteúdo.

Páginas de master padrão do SharePoint, como seattle.master e oslo.master incluem muito mais espaços reservados de conteúdo do que o SharePoint exige. Por exemplo, essas páginas master incluem <SharePoint:Themes runat="server"> e <SharePoint.CssRegistration runat="server"> controles.

Os controles Themes e CssRegistration são executados durante o ciclo de vida da página. Usando o padrão de provisionamento remoto, é possível utilizar uma ação personalizada para adicionar um controle de servidor para registrar um CSS personalizado.

Os espaços reservados de conteúdo que não estão visíveis ainda funcionam conforme o esperado, mas qualquer conteúdo gerado é omitido da fonte HTML que os navegadores reconhecem. Um espaço reservado de conteúdo com Visible="false" está oculto.

Importante

Não crie espaços reservados personalizados em páginas de master personalizadas que existem em páginas .master fora da caixa, como seattle.master e oslo.master. Isso retornará exceções catastróficas.

Controle de navegação do pacote online do SharePoint

O SharePoint Online apresenta nova marcação de página master para o controle de navegação do Suite, que renderiza a navegação superior. A marcação padrão do controle da Navegação de Pacote é diferente dependendo de o site estar na Intranet ou ser voltado para o público. Para saber mais sobre o controle de Navegação de Pacote e ver exemplos de código para sites de Intranet e voltados para o público que podem ser adicionados às suas páginas mestres, consulte SharePoint Online Suite Navigation control.

Usar o CSOM para personalizar as regiões de uma página do SharePoint

Geralmente, recomendamos que você use a classe UserCustomAction para adicionar ou remover links e outros elementos. Essa é uma variante do SharePoint usando o elemento CustomAction , que você pode reconhecer como parte da estrutura de recursos se estiver familiarizado com o modelo de código de confiança completo. Apesar de o elemento CustomAction e o padrão de provisionamento da estrutura de recursos não serem especificamente compatíveis com o modelo de objeto do lado do cliente (CSOM), os mesmos identificadores de local disponíveis ao elemento CustomAction podem ser usados no código CSOM.

<CustomAction
  RequiredAdmin = "Delegated | Farm | Machine"
  ControlAssembly = "Text"
  ControlClass = "Text"
  ControlSrc = "Text"
  Description = "Text"
  FeatureId = "Text"
  GroupId = "Text"
  Id = "Text"
  ImageUrl = "Text"
  Location = "Text"
  RegistrationId = "Text"
  RegistrationType = "Text"
  RequireSiteAdministrator = "TRUE" | "FALSE"
  Rights = "Text"
  RootWebOnly = "TRUE" | "FALSE"
  ScriptSrc = "Text"
  ScriptBlock = "Text"
  Sequence = "Integer"
  ShowInLists = "TRUE" | "FALSE"
  ShowInReadOnlyContentTypes = "TRUE" | "FALSE"
  ShowInSealedContentTypes = "TRUE" | "FALSE"
  Title = "Text"
  UIVersion = "Integer">
</CustomAction>

Personalizar a faixa de opções do SharePoint

Quando você personaliza a faixa de opções, o HTML que o servidor processa é atribuído ao nome da classe que você atribuiu a um estilo personalizado. Para usar esse recurso, vá até a Biblioteca de Estilos e crie um novo arquivo de CSS para cada estilo que quiser adicionar à faixa de opções. Você pode adicionar estilos personalizados a duas seções da faixa de opções:

  • Para a seção Elementos de Página : span.ms-rteElement-{{YOUR_OWN_DEFINED_NAME}}. Ou use os estilos H1, H2, H3 ou H4, que estarão dispostos em volta do texto a que o estilo está aplicado.
  • Para a seção Estilos de Texto : .ms-rteEStyle-{{YOUR_OWN_DEFINED_NAME}}.

Depois, na definição de classe de CSS, adicione a seguinte linha:

-ms-name:"The name visual in the ribbon for your style";

Agora você pode terminar de definir os detalhes de sua classe personalizada de CSS no arquivo .css personalizado.

Personalizar a Navegação do Suite em uma página da Web Part

No SharePoint, a interface do usuário tem uma aparência moderna baseada em blocos de página. Por exemplo, blocos ao vivo aparecem na página padrão do SharePoint por padrão. A navegação superior facilita que os usuários vejam e acessem conteúdo social e OneDrive for Business. Você pode personalizar a aparência dessas áreas usando uma mistura de CSS e JavaScript.

Depois de criar uma página da Web Part, adicione uma Web Part do Editor de Scripts a uma zona de Web Part disponível. Você pode usar essa Web Part para adicionar JavaScript à sua página. Você pode adicionar código JavaScript à Web Part do Editor de Scripts que identifica a barra de navegação superior por seu ElementId e, em seguida, escondê-lo definindo sua propriedade de visibilidade como oculta.

Personalizar o menu Configurações (engrenagem)

Você pode usar as entradas da classe UserCustomAction e do pacote de propriedades para personalizar o menu de configurações de qualquer site do SharePoint, conforme mostrado no exemplo de código a seguir.

public void AddCustomActions(ClientContext clientContext)
{
  // Add a site settings link if it doesn't already exist.
  if (!CustomActionAlreadyExists(clientContext, "Sample_CustomSiteSetting"))
  {
    // Add a site settings link.
    UserCustomAction siteSettingLink = clientContext.Web.UserCustomActions.Add();
    siteSettingLink.Group = "SiteTasks";
    siteSettingLink.Location = "Microsoft.SharePoint.SiteSettings";
    siteSettingLink.Name = "Sample_CustomSiteSetting";
    siteSettingLink.Sequence = 1000;
    siteSettingLink.Url = string.Format(DeployManager.appUrl, clientContext.Url);
    siteSettingLink.Title = "Modify Site Metadata";
    siteSettingLink.Update();
    clientContext.ExecuteQuery();
  }

  // Add a site actions link, if it doesn't already exist.
  if (!CustomActionAlreadyExists(clientContext, "Sample_CustomAction"))
  {
    UserCustomAction siteAction = clientContext.Web.UserCustomActions.Add();
    siteAction.Group = "SiteActions";
    siteAction.Location = "Microsoft.SharePoint.StandardMenu";
    siteAction.Name = "Sample_CustomAction";
    siteAction.Sequence = 1000;
    siteAction.Url = string.Format(DeployManager.appUrl, clientContext.Url); ;
    siteAction.Title = "Modify Site Metadata";
    siteAction.Update();
    clientContext.ExecuteQuery();
  }
}

Personalizar o modo de exibição em árvore

Para modificar a largura da exibição da árvore, adicione uma <div> marca ao redor da marca de árvore na página .master e atribua uma classe CSS com um atributo de largura de <div>estilo ao . Você pode aumentar a largura da navegação de Lançamento Rápido adicionando a definição de estilo a seguir ao arquivo *.css .

.ms-nav {
  width: 220 px;
}

Personalizar o conteúdo da página

Os requisitos para personalizar o conteúdo da página dependem do conteúdo que você está incluindo em sua página. Quanto à personalização do menu Ações do Site , você pode usar um objeto UserCustomAction para provisionar a identidade visual em web parts.

Se você estiver criando um site de publicação, consulte Criar um layout de página no SharePoint para saber o básico. Os layouts de página dependem da disponibilidade da classe ContentTypeId no CSOM. Quanto a outros membros que não estão disponíveis no CSOM, você pode usar um serviço WCF (Windows Communication Foundation) para trabalhar com ContentTypeId como uma solução alternativa temporária.

Confira também