Eu implementei o furo do cabeçalho no magento, e mesmo tendo trabalhado por cliente, preciso da capacidade de elevar esse nível um pouco mais fundo, fazendo com que ele funcione também na contagem de itens do carrinho de compras.
Aqui está o meu código.
class AD_PageCache_Model_Container_Header extends Enterprise_PageCache_Model_Container_Abstract {
protected function _getIdentifier() {
return $this->_getCookieValue(Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER, '');
}
// public function getCacheKeyInfo() {
// $info = parent::getCacheKeyInfo();
// die('boo');
// $info['cart_count'] = Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
// return $info;
// }
protected function _getCacheId() {
//return 'CONTAINER_HEADER_' . md5($this->_placeholder->getAttribute('cache_id') . $this->_placeholder->getAttribute('cart_count') ) . '_' . $this->_getIdentifier();
return 'CONTAINER_HEADER_' . md5( $this->_placeholder->getAttribute('cache_id') . $this->_getIdentifier() );
}
protected function _renderBlock() {
$blockClass = $this->_placeholder->getAttribute('block');
$template = $this->_placeholder->getAttribute('template');
$block = new $blockClass;
$block->setTemplate($template);
return $block->toHtml();
}
}
Meu entendimento do que tenho lido em threads de perfuração no Magento é que o aplicativo Mage não é inicializado quando o cache do FPC está atendendo à solicitação, portanto, basicamente, o método de adicionar um atributo de espaço reservado não pode funcionar, pois
Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
não vai funcionar, certo?
E apesar de como é que deveria ser, mas não parecia funcionar, como se eu die()
tivesse feito uma ligação lá, mas nada aconteceu.
Então o que estou perdendo? E como posso recuperar a contagem de itens do carrinho para que ele possa ser usado para criar o ID do cache?
Progresso: encontrei
Enterprise_PageCache_Model_Cookie::COOKIE_CART
mas isso muda apenas uma vez após a atualização do carrinho. Depois disso, permanece o mesmo. Isso é estranho, parece a solução, mas seu comportamento diz o contrário.
Também não consegui encontrar a contagem de itens do carrinho na sessão. Portanto, a única maneira que vejo atualmente para fazer isso seria salvar a quantidade do carrinho na sessão sempre que ela for atualizada e usá-la _getIdentifier()
.
Eu descobri que os observadores são inconsistentes para o carrinho. Além disso, a atualização dos eventos é despachada, mas para remoção, não. Então, acho que posso adicionar meu observador à atualização de preço da cotação de alguma forma, se isso for consistente em ter observadores?
Além disso, li a invalidação do cache de página inteira na alteração do carrinho (cotação), mas lida com o uso de
Enterprise_PageCache_Model_Cookie::COOKIE_CART
o que não funciona bem no meu caso, embora eu ache que o problema está dentro dele. O quão? Não tenho certeza.
Além disso, a versão atual do EE que estamos executando nem tem a pasta Avançado
Model/Container
. estou usandoEE 1.10.1.1
Alguma sugestão?
_getIdentifier
que o bloco seja exclusivo do carrinho de clientes ou mesmo o número de itens no carrinho?