Eu tenho um problema que parece estar relacionado ao cache de blocos estáticos do CMS.
Eu tenho uma página cms e dentro dessa página estou processando vários blocos estáticos cms. Uma versão simplificada do conteúdo da página do CMS é semelhante a esta:
<div class="cms-block-1">{{block type="cms/block" block_id="banner_home"}}</div>
<div class="cms-block-2">{{block type="cms/block" block_id="promo_home_1_1"}}</div>
<div class="cms-block-3">{{block type="cms/block" block_id="promo_home_1_2"}}</div>
<div class="cms-block-4">{{block type="cms/block" block_id="promo_home_2_1"}}</div>
<div class="cms-block-5">{{block type="cms/block" block_id="promo_home_2_2"}}</div>
<div class="cms-block-6">{{block type="cms/block" block_id="promo_home_2_3"}}</div>
<div class="cms-block-7">{{block type="cms/block" block_id="promo_home_3_1"}}</div>
<div class="cms-block-8">{{block type="cms/block" block_id="promo_home_3_2"}}</div>
A página é carregada conforme o esperado imediatamente após a limpeza do cache do bloco, com a seguinte aparência:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_2_1 content</div>
<div class="cms-block-5">promo_home_2_2 content</div>
<div class="cms-block-6">promo_home_2_3 content</div>
<div class="cms-block-7">promo_home_3_1 content</div>
<div class="cms-block-8">promo_home_3_1 content</div>
No entanto, após o carregamento inicial da página, todas as páginas subsequentes carregam o conteúdo incorreto. Se parece com isso:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_1_1 content</div>
<div class="cms-block-5">promo_home_1_2 content</div>
<div class="cms-block-6">promo_home_2_1 content</div>
<div class="cms-block-7">promo_home_2_2 content</div>
<div class="cms-block-8">promo_home_2_3 content</div>
No segundo exemplo, você pode ver as duas primeiras promoções estão corretas, mas tudo depois disso está exibindo o conteúdo errado para o block_id. Além disso, os blocos promo_home_1_1 e promo_home_1_2 são renderizados duas vezes e promo_home_3_1 e promo_home_3_2 nunca são renderizados. É como se o mapeamento entre block_id e seu conteúdo estático de bloco associado estivesse sendo misturado de alguma forma. Isso está relacionado ao armazenamento em cache, como se o cache do bloco não estivesse ativado, e não vejo mais o problema.
Além disso, provavelmente vale a pena notar que esta página funcionava no EE 1.13, mas após a atualização para o EE 1.14.2, esse problema começou a ocorrer.
Percebo que é muito difícil dizer o que há de errado sem saber o que mais está acontecendo no sistema, mas espero que alguém possa me dar pelo menos um pouco mais de orientação aqui, pois estou ficando sem ideias.
Atualizar:
Eu também tentei isso com widgets, por exemplo
<div class="cms-block-1">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="63"}}</div>
<div class="cms-block-2">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="64"}}</div>
<div class="cms-block-3">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="65"}}</div>
Nesse caso, todos os três blocos retornaram o mesmo conteúdo, embora os IDs apontem para blocos diferentes no banco de dados. Quando o cache é limpo, o bloco retornado às vezes muda, mas os três widgets ainda terão o mesmo conteúdo.
fonte
Respostas:
Ok, então eu encontrei a causa deste problema e parece ser um problema no núcleo magento.
Há um novo método _construct adicionado ao Mage_Cms_Block_Block no magento 1.14.2, que contém o seguinte código.
Isso está ativando ativamente o armazenamento em cache para blocos cms. Nenhuma chave de cache está definida; portanto, ela retorna ao Mage_Core_Block_Abstract :: getCacheKeyInfo, que usa o nome do bloco no layout. Nesse caso, não estamos usando um arquivo xml de layout para adicionar o bloco e não há um nome definido. O Magento parece tentar lidar com isso definindo algo como ANONYMOUS_78 como o nome. No entanto, por algum motivo, isso não parece funcionar 100%, portanto, as duplicatas que eu estava vendo.
Minha solução foi substituir a classe Mage_Cms_Block_Block em minha própria extensão e adicionar um novo método para definir explicitamente a chave de cache para o ID do bloco, em vez de um valor atribuído. A classe fica assim:
Isso parece ter resolvido o problema.
Atualizar:
Parece que esse mesmo problema também existe no CE 1.9.2
fonte
Para clientes Magento EE, solicite o patch SUPEE-5874 da equipe de suporte do Magento Enterprise.
Ele atualizará dois arquivos
Não consigo postar o patch real do Magento, pois é propriedade deles.
fonte
É bom aqui que o Magento também esteja armazenando em cache blocos estáticos também. Como a versão atualizada atual inclui esse problema estranho devido ao armazenamento em cache de blocos estáticos, você pode usar meu módulo de forma totalmente gratuita.
Esta extensão foi criada para melhor armazenamento em cache de blocos estáticos. Também leva em consideração se o site está protegido ou não. Além disso, a extensão não possui reescritas principais, o que torna este módulo ainda melhor.
Aqui você vai .
Para uma melhor visão geral da extensão, você pode consultar este tópico .
fonte
Fornecemos um patch para o CE, que resolve esse problema. Como o EE é baseado no CE, isso também pode se aplicar.
Você pode baixar esse caminho na minha lista: https://gist.github.com/tux-rampage/77b286f7973336877f7b
Carregue a essência, descompacte-a e execute o seguinte comando na raiz do magento:
Teste isso em um ambiente de preparação antes de aplicá-lo em um sistema ativo!
fonte