Como adicionar classes à marca BODY dinamicamente com base no caminho / profundidade da página?

22

Como adicionar classes à tag body dinamicamente, como neste exemplo abaixo?

-Home
-Cidades
--Melbourne <body class="melbourne">
--- Parques temáticos       <body class="melbourne theme_parks">
--- Restaurantes -       <body class="melbourne restaurants">
Nova York       <body class="new_york">
--- Parques temáticos       <body class="new_york theme_parks">
--- Restaurantes       -Entre em       contato       <body class="new_york restaurants">
conosco       <body class="contact_us">

Drupal novato aqui e sem fundo de programação. Portanto, eu apreciaria muito se você pudesse ser o mais detalhado possível ao compartilhar uma solução.

kyooriouskoala
fonte

Respostas:

37

Para explicar a resposta de Nikhil Mohan, você pode implementar template_preprocess_html()dentro do arquivo template.php do seu tema. Leia a documentação sobre Substituir saída teórica para entender o básico do que está acontecendo aqui.

Nesta função, você tem acesso à variável $vars['classes_array'], que contém uma lista de classes que serão aplicadas à <body>tag HTML na página.

Infelizmente, as informações sobre a localização da página atual no menu não estão disponíveis imediatamente. Você pode usar menu_get_item()e menu_get_ancestors()obter essas informações, mas há muito poder de processamento para algo que provavelmente podemos obter com uma abordagem simples.

Supondo que você esteja usando o módulo pathauto para criar automaticamente caminhos semânticos para suas páginas de conteúdo com base no caminho do menu (por exemplo, sua página Parques Temáticos de Melbourne teria o caminho 'melbourne / theme_parks'), você pode usar o caminho da página para criar as classes que deseja. está procurando:

function THEMENAME_preprocess_html(&$vars) {
  $path = drupal_get_path_alias();
  $aliases = explode('/', $path);

  foreach($aliases as $alias) {
    $vars['classes_array'][] = drupal_clean_css_identifier($alias);
  } 
}

É isso aí. O Drupal agora examinará o alias do caminho da página atual e adicionará uma classe à <body>tag para cada parte do alias do caminho.

sheena_d
fonte
1
Se os caminhos não funcionarem, a análise de menu_get_active_breadcrumb também será uma opção. É provável que esteja no staticcache nesse ponto, portanto quase sem sobrecarga.
mpdonadio
3
Obrigado a todos, especialmente @sheena_d pela explicação e pelo código! Teve que fazer um pouco de pesquisa sobre a forma de fazê-lo funcionar em Omega Tema e conseguiu fazê-lo funcionar: D Esta é a linha para fazer o trabalho em Omega Tema: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala
1

Você pode fazer uso de template_preprocess_htmlquais variáveis ​​de pré-processamento para html.tpl.php

Veja também html.tpl.php

Implementação de tema padrão para exibir a estrutura html básica de uma única página do Drupal

niksmac
fonte
1

Aqui está o módulo para adicionar classes na tag body com base na função ou nas páginas.

Classe de Corpo Comum

Thakur Sanjay Singh Chauhan
fonte
0

Criou o módulo Drupal de classes corporais para ajudar com isso. Sinta-se à vontade para criar problemas para adicionar mais pontos de integração de classe corporal.

RobLoach
fonte