Perforación de encabezado en tienda magento

10

He implementado la perforación del encabezado en magento, y aunque lo he hecho trabajar por cliente, necesito la capacidad de llevar este nivel más profundo al hacer que también funcione en los recuentos de artículos de carrito de diferencias.

Aquí está mi 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();
    }

}

Según tengo entendido, lo que he estado leyendo de los subprocesos en Magento es que la aplicación Mage no se inicializa cuando el caché FPC atiende la solicitud, por lo que básicamente el método de agregar un atributo de marcador de posición no puede funcionar, ya que

Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();

no funcionará, ¿verdad?

Y a pesar de cómo es que debería ser, pero no parecía funcionar en absoluto, como si die()hubiera hecho una llamada allí pero no pasó nada.

Entonces, ¿qué me estoy perdiendo? ¿Y cómo puedo recuperar el recuento de artículos del carrito para que pueda usarse para construir la ID de caché?

Progreso: encontré

Enterprise_PageCache_Model_Cookie::COOKIE_CART

pero esto cambia solo una vez al actualizar el carrito. Después de eso se queda igual. Esto es extraño, parece la solución, pero su comportamiento dice lo contrario.

Tampoco pude encontrar el recuento de artículos del carrito en la sesión. Entonces, la única forma en que veo esto es guardar la cantidad del carrito en la sesión cada vez que se actualiza y luego usarla _getIdentifier().

Encontré que los observadores son inconsistentes para el carro. Además, la actualización de los eventos se envía, pero para su eliminación, no lo hace. Entonces, supongo que puedo agregar mi observador a la actualización de precios de la cotización de alguna manera, si eso es consistente en tener observadores.

Además, leí la invalidación de caché de página completa en el cambio de carrito (presupuesto) pero se maneja usando

Enterprise_PageCache_Model_Cookie::COOKIE_CART

lo que no funciona bien en mi caso, aunque creo que el problema reside en él. ¿Que? como? No estoy seguro.

Además, la versión actual de EE que tenemos en ejecución ni siquiera tiene una carpeta avanzada Model/Container. estoy usandoEE 1.10.1.1

¿Alguna sugerencia?

Nirav Sheth
fuente
No estoy seguro, pero creo que esta pregunta está más relacionada con Stack Overflow, pero no con este sitio ...
Sergei Guk
2
La perforación de agujeros parece usarse aquí en un sentido no tradicional, ¿puede explicar la característica que está tratando de implementar sin usar jerga?
Ralph Tice
1
¿Por qué no agregar la identificación del carrito de los clientes para _getIdentifierque el bloque sea exclusivo del carrito de los clientes, o incluso el número de artículos en su carrito?
B00MER
@SergeiGuk Bueno, está muy relacionado con Magento
j0k
@RalphTice Estoy tratando de implementar un indicador de valor de carrito en el encabezado que muestra al usuario cuántos artículos tiene en su carrito. Dado que ese valor es diferente por usuario, no quiero que se almacene en caché.
Nirav Sheth

Respuestas:

3

Usar Enterprise_PageCache_Model_Cookie::COOKIE_CARTes el camino correcto, pero es posible que deba hacer algunos cambios.

Enterprise_PageCache_Model_Observer::registerQuoteChangese llama en cada presupuesto guardado (cambio de número de artículo incluido) y también se llama en el contexto Mage::app()para que pueda acceder a todos los datos de la sesión. Sobrescriba este observador y agregue más datos $this->_getCookie()->setObscurepara que el valor cambie siempre que lo necesite.

Paul Grigoruta
fuente
¿Algún ejemplo que estés dispuesto a compartir al hacer esto?
Nirav Sheth