Desativar cache para blocos específicos

9

Gostaria de permitir que as páginas continuem se beneficiando do mecanismo de cache do Drupal 8 para usuários anônimos, exceto por blocos específicos que devem ser atualizados a cada atualização de página, sabendo que são gerados a partir de Views.

É tecnicamente possível? Quão?

Amina
fonte
Como o MPD observou, use a configuração de idade máxima. Também é possível fazer isso via interface do usuário no formulário de edição de blocos.
Eu também tenho esse problema - é irritante que o Drupal não lide com isso automaticamente. Caching é bom, mas Drupal é suposto ser para sites dinâmicos ...
James

Respostas:

1

O que esse bloco de visualizações mostra?

O D8 possui tags e contextos de cache que invalidarão automaticamente o bloco se algo mudar.

Portanto, se você tiver uma lista de nós, toda vez que um nó for adicionado ou atualizado, esse bloco será atualizado, mas até então, a versão em cache será usada. O que é muito melhor do que reconstruir em todas as páginas.

Também funciona com o cache da página; essas páginas também serão atualizadas automaticamente.

Muitas coisas funcionam apenas com o cache imediato, sem a necessidade de configurações manuais.

Editar (respondendo ao comentário):

Aleatório com o plugin de classificação aleatória? Isso deve marcar automaticamente esse bloco como não armazenável em cache. Isso, no entanto, não afeta o módulo de cache da página. Agora existe um novo módulo de cache dinâmico de páginas smartcache / dinâmico, mas ele estará disponível apenas na próxima versão beta (ou RC!). Eventualmente, isso permitirá armazenar em cache o restante da página e criar essa parte.

Mas um caso como esse provavelmente é melhor implementado usando javascript. Se houver apenas alguns nós, você poderá exibi-los todos, ocultos por padrão e tornar aleatoriamente um deles visível. Ou solicite um URL com javascript que retorne um anúncio aleatório ou, melhor ainda, visite um aleatório de N URLs que retornem um anúncio (por exemplo, retornando uma lista de URLs e escolhendo um deles. Você pode até fazer isso diretamente para o URL da imagem .

Berdir
fonte
As visualizações retornam um nó aleatório para variar o bloco de anúncios.
Amine
Vou esperar para o próximo lançamento para a solução limpa para :)
Amine
Sim, o aleatório é do plugin Views Random Sort. Eu concordo, é possível gerar um conteúdo de bloco javascript que coloque em uma lista as entidades e, em seguida, decida na camada do navegador com alguma função aleatória ou circular, escolher e ajax um deles. No entanto, terei mais de um bloco como este em algumas páginas e uma solução do lado do servidor se ajustará melhor.
Amine
10

Se esse for um bloco personalizado, você poderá usar a API de cache e definir a idade máxima do cache como 0, por exemplo,

$build = [
 // ...
 '#cache' => [
   'max-age' => 0,
 ],
];

Se for um bloco existente, você poderá alterá-lo para adicioná-lo à matriz de renderização.

mpdonadio
fonte
Conforme explicado na pergunta, meu bloco é um bloco de visualizações. Eu acho que é muito complicado interferir na camada php / module.
Amine
11
Infelizmente, isso não funciona de qualquer maneira (tentei). Parece que a página é entregue pelo pagecache e contém o bloco desatualizado. Mas ainda estou investigando.
Rainer Feike