# ASP.NET Core MVC / Razor Pages: Hooks de Layout O sistema de temas do ABP Framework coloca o layout da página nos pacotes NuGet do [tema](Theming.md). Isso significa que a aplicação final não inclui um `Layout.cshtml`, portanto, você não pode alterar diretamente o código do layout para personalizá-lo. Você copia o código do tema para a sua solução. Nesse caso, você tem total liberdade para personalizá-lo. No entanto, você não poderá obter atualizações automáticas do tema (atualizando o pacote NuGet do tema). O ABP Framework oferece diferentes maneiras de [personalizar a interface do usuário](Customization-User-Interface.md). O **Sistema de Hooks de Layout** permite que você **adicione código** em partes específicas do layout. Todos os layouts de todos os temas devem implementar esses hooks. Por fim, você pode adicionar um **componente de visualização** em um ponto de hook. ## Exemplo: Adicionar Script do Google Analytics Suponha que você precise adicionar o script do Google Analytics ao layout (que estará disponível para todas as páginas). Primeiro, **crie um componente de visualização** em seu projeto: ![bookstore-google-analytics-view-component](../../images/bookstore-google-analytics-view-component.png) **NotificationViewComponent.cs** ````csharp public class GoogleAnalyticsViewComponent : AbpViewComponent { public IViewComponentResult Invoke() { return View("/Pages/Shared/Components/GoogleAnalytics/Default.cshtml"); } } ```` **Default.cshtml** ````html ```` Altere `UA-xxxxxx-1` pelo seu próprio código. Em seguida, você pode adicionar esse componente a qualquer um dos pontos de hook no `ConfigureServices` do seu módulo: ````csharp Configure(options => { options.Add( LayoutHooks.Head.Last, //O nome do hook typeof(GoogleAnalyticsViewComponent) //O componente a ser adicionado ); }); ```` Agora, o código do GA será inserido no `head` da página como o último item. ### Especificando o Layout A configuração acima adiciona o `GoogleAnalyticsViewComponent` a todos os layouts. Talvez você queira adicionar apenas a um layout específico: ````csharp Configure(options => { options.Add( LayoutHooks.Head.Last, typeof(GoogleAnalyticsViewComponent), layout: StandardLayouts.Application //Defina o layout a ser adicionado ); }); ```` Consulte a seção *Layouts* abaixo para saber mais sobre o sistema de layout. ## Pontos de Hook de Layout Existem alguns pontos de hook de layout predefinidos. O `LayoutHooks.Head.Last` usado acima foi um deles. Os pontos de hook padrão são: * `LayoutHooks.Head.First`: Usado para adicionar um componente como o primeiro item na tag HTML head. * `LayoutHooks.Head.Last`: Usado para adicionar um componente como o último item na tag HTML head. * `LayoutHooks.Body.First`: Usado para adicionar um componente como o primeiro item na tag HTML body. * `LayoutHooks.Body.Last`: Usado para adicionar um componente como o último item na tag HTML body. * `LayoutHooks.PageContent.First`: Usado para adicionar um componente logo antes do conteúdo da página (o `@RenderBody()` no layout). * `LayoutHooks.PageContent.Last`: Usado para adicionar um componente logo após o conteúdo da página (o `@RenderBody()` no layout). > Você (ou os módulos que você está usando) pode adicionar **vários itens ao mesmo ponto de hook**. Todos eles serão adicionados ao layout na ordem em que foram adicionados. ## Layouts O sistema de layout permite que os temas definam layouts padrão e nomeados e permite que qualquer página selecione um layout adequado para o seu propósito. Existem três layouts predefinidos: * "**Application**": O layout principal (e padrão) para uma aplicação. Normalmente, contém cabeçalho, menu (barra lateral), rodapé, barra de ferramentas, etc. * "**Account**": Este layout é usado pelo login, registro e outras páginas semelhantes. É usado para as páginas na pasta `/Pages/Account` por padrão. * "**Empty**": Layout vazio e mínimo. Esses nomes são definidos na classe `StandardLayouts` como constantes. Você pode criar seus próprios layouts, mas esses são os nomes de layout padrão e implementados por todos os temas por padrão. ### Localização do Layout Você pode encontrar os arquivos de layout [aqui](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts) para o tema básico. Você pode usá-los como referência para construir seus próprios layouts ou pode substituí-los, se necessário. ## Veja também * [Personalizando a Interface do Usuário](Customization-User-Interface.md)