Não sei por que, mas o Views não adiciona nomes de classes CSS "legíveis por humanos" (como, por exemplo, o nome da máquina da visualização) aos blocos que ele cria ( apenas adiciona suas classes à parte "conteúdo" gerada quando adicionando classes à parte " CSS class " no editor de exibição (veja as capturas de tela abaixo!)).
Ele apenas adiciona as classes usuais block block-views
e possivelmente contextual-links-region
CSS ao (s) bloco (s) e gera um ID exclusivo (não classe) como este: block-views-3d8f7966168beeec655c8ead69336789
(porque seu delta é esse código de hash gerado).
Não faz sentido escrever regras CSS para essas classes e IDs (como .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }
), porque essas classes / IDs podem mudar ao alterar o bloco Views.
Como posso adicionar algumas classes CSS personalizadas em uma implementação de hook_block_view_alter()
, se eu não consigo nem identificar esses blocos por causa de seu delta de hash gerado?
Eu não quero usar a classe de bloco , porque sinto que é um exagero adicionar apenas algumas classes a um ou dois blocos gerados por visualizações (BTW, verifiquei o módulo e sinto a SELECT css_class, module, delta FROM {block_class}
consulta block_class_preprocess_block()
como um exagero, porque verifica TODAS as classes adicionadas, mesmo que o bloco esteja oculto ...).
Então, eu gostaria de resolvê-lo do meu próprio módulo.
EDITAR
Um exemplo:
Minha visão com o nome da máquina e as classes CSS adicionadas:
block--views--3d8f7966168beeec655c8ead69336789.tpl.php
arquivo e, neste caso, estou no mesmo ponto como se tivesse usado umaif($variables['block']->delta == '3d8f7966168beeec655c8ead69336789')
condiçãohook_preprocess_block()
. Era isso que eu queria evitar, porque pensei que poderia usar um nome mais legível por humanos no meu lugar. Por exemplo, e se eu quiser mover a visualização para outra com os mesmos parâmetros, excluo a anterior, mas uso o mesmo nome de máquina e classes CSS, mas o hash exclusivo gerado é alterado? Nesse caso, perco minhas modificações.Essa é uma pergunta antiga, mas não há resposta adequada. Me deparei com o mesmo problema. As soluções em que pude pensar foram o seletor pai CSS (que ainda não existe) OU alguma manipulação do Drupal.
Adicionei um hook_preprocess_block para adicionar uma classe CSS de wrapper a todos os blocos de exibição que definem uma classe CSS. Isso não é trivial, então vou colocar meu código aqui. Pode não funcionar com todos os blocos de exibição. Se você tiver um problema com este código, fique à vontade para atualizá-lo e publicar sua própria versão.
Exemplo: a exibição com a classe CSS "test" estará contida em um bloco com a classe CSS "test-wrapper".
fonte
Existe um módulo para esse fim.
Ver classe superior do bloco
fonte
Para mim
hook_preprocess_block()
não funcionou. (Talvez porque eu precisei adicionar o bloco diretamente de um arquivo de modelo viaviews_embed_view()
.)No entanto,
hook_preprocess_views_view()
com uma verificação simples para$vars['view']->current_display
o trabalho:fonte
A maneira mais fácil para mim era duplicar o arquivo block.tpl.php, renomeá-lo
block--myregion.tpl.php
e adicionar minhas classes a ele.Consulte: Página de blocos de temas .
fonte