Perfuração do cabeçalho na loja magento

10

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?

Nirav Sheth
fonte
Não tenho certeza, mas acho que esta questão é mais relacionado com o estouro de pilha, mas não neste site ...
Sergei Guk
2
O furador parece ser usado aqui em um sentido não tradicional. Você pode explicar o recurso que está tentando implementar sem usar o jargão?
Ralph Tice
1
Por que não anexar o ID do carrinho de clientes para _getIdentifierque o bloco seja exclusivo do carrinho de clientes ou mesmo o número de itens no carrinho?
2200
@SergeiGuk Bem, está fortemente relacionada com Magento
j0k
@RalphTice Estou tentando implementar um indicador de valor do carrinho no cabeçalho que mostra ao usuário quantos itens ele tem no carrinho. Como esse valor é diferente por usuário, não quero que ele seja armazenado em cache.
Nirav Sheth

Respostas:

3

Usar Enterprise_PageCache_Model_Cookie::COOKIE_CARTé o caminho certo a seguir, mas pode ser necessário fazer algumas alterações.

Enterprise_PageCache_Model_Observer::registerQuoteChangeé chamado em cada salvamento de cotação (mudança de número de item incluída) e também é chamado no contexto Mage::app()para que você possa acessar todos os dados da sessão. Substitua esse observador e inclua mais dados $this->_getCookie()->setObscurepara que o valor mude sempre que você precisar.

Paul Grigoruta
fonte
Algum exemplo que você possa compartilhar ao fazer isso?
Nirav Sheth