Holepunching di header in magento store


10

Ho implementato un holepunching di header in magento, e anche se l'ho fatto funzionare su una base per cliente, ho bisogno della capacità di approfondire questo livello facendolo funzionare anche sul conteggio degli articoli del carrello diff.

Ecco il mio codice

    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();
    }

}

La mia comprensione da ciò che ho letto dai thread di holepunch su Magento è che l'app Mage non è inizializzata quando la cache FPC sta servendo la richiesta, quindi sostanzialmente il metodo di aggiunta di un attributo segnaposto non può funzionare, dal momento che

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

non funzionerà, vero?

E anche se come dovrebbe essere, ma non sembra funzionare affatto, come se avessi fatto una die()chiamata ma non è successo niente.

Quindi cosa mi manca? E come posso recuperare il conteggio degli articoli del carrello in modo che possa essere utilizzato per creare l'ID cache?

Progresso: ho trovato

Enterprise_PageCache_Model_Cookie::COOKIE_CART

ma questo cambia solo una volta dopo l'aggiornamento del carrello. Dopodiché rimane lo stesso. È strano, sembra la soluzione ma il suo comportamento dice diversamente.

Non sono riuscito a trovare gli articoli del carrello nella sessione. Quindi l'unico modo che vedo attualmente per fare questo sarebbe quello di salvare la quantità del carrello in sessione ogni volta che si aggiorna e quindi utilizzarlo in _getIdentifier().

Ho scoperto che gli osservatori sono incoerenti per il carrello. Inoltre, gli eventi di aggiornamento vengono inviati, ma per la rimozione, non lo fa. Quindi immagino di poter aggiungere il mio osservatore all'aggiornamento del prezzo del preventivo in qualche modo, se ciò è coerente con gli osservatori?

Inoltre, ho letto l' annullamento della cache a pagina intera sulla modifica del carrello (preventivo) ma non si gestisce

Enterprise_PageCache_Model_Cookie::COOKIE_CART

che non funziona bene nel mio caso, anche se penso che il problema risieda al suo interno. Cosa come? Non sono sicuro.

Anche l'attuale versione di EE in esecuzione non ha nemmeno la cartella Avanzate in Model/Container. sto usandoEE 1.10.1.1

Eventuali suggerimenti?


Non sono sicuro, ma penso che questa domanda sia più legata allo StackTranslate.it, ma non a questo sito ...
Sergei Guk,

2
L'olepunching sembra essere usato qui in un senso non tradizionale, puoi spiegare la funzione che stai cercando di implementare senza usare il gergo?
Ralph Tice,

1
Perché non aggiungere l'ID del carrello dei clienti in _getIdentifiermodo che il blocco sia univoco per il carrello dei clienti o anche il numero di articoli nel loro carrello?
B00MER,

@SergeiGuk Beh, è ​​fortemente correlato a Magento
j0k

@RalphTice Sto cercando di implementare un indicatore del valore del carrello nell'intestazione che mostra all'utente quanti elementi hanno nel carrello. Poiché quel valore è diverso per utente, non voglio che sia memorizzato nella cache.
Nirav Sheth,

Risposte:


3

L'utilizzo Enterprise_PageCache_Model_Cookie::COOKIE_CARTè la strada giusta da percorrere, ma potrebbe essere necessario apportare alcune modifiche.

Enterprise_PageCache_Model_Observer::registerQuoteChangeviene chiamato ad ogni salvataggio del preventivo (inclusa la modifica del numero di articolo) e viene anche chiamato nel contesto in Mage::app()modo da poter accedere a tutti i dati della sessione. Sovrascrivi questo osservatore e aggiungi più dati in $this->_getCookie()->setObscuremodo che il valore cambi ogni volta che è necessario.


Qualche esempio che potresti voler condividere facendo questo?
Nirav Sheth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.