Holepunching header di toko magento

10

Saya telah menerapkan holepunching header di magento, dan meskipun saya membuatnya bekerja berdasarkan basis pelanggan, saya perlu kemampuan untuk mengambil level ini lebih dalam dengan membuatnya bekerja pada jumlah item keranjang yang berbeda juga.

Ini kode saya.

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

}

Pemahaman saya dari apa yang telah saya baca dari utas holepunching di Magento adalah bahwa aplikasi Mage tidak diinisialisasi ketika cache FPC melayani permintaan, jadi pada dasarnya metode menambahkan atribut placeholder tidak dapat bekerja, karena

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

tidak akan bekerja, kan?

Dan meskipun bagaimana seharusnya, tapi sepertinya tidak berjalan sama sekali, seperti saya die()menelepon di sana tetapi tidak ada yang terjadi.

Jadi apa yang saya lewatkan? Dan bagaimana saya dapat mengambil jumlah item keranjang sehingga dapat digunakan untuk membangun ID cache?

Kemajuan: Saya menemukan

Enterprise_PageCache_Model_Cookie::COOKIE_CART

tetapi ini hanya berubah sekali setelah pembaruan keranjang. Setelah itu tetap sama. Ini aneh, ini terasa seperti solusi tetapi perilakunya mengatakan sebaliknya.

Saya juga tidak bisa menemukan item kereta dalam sesi. Jadi satu-satunya cara yang saya lihat saat ini adalah dengan menyimpan jumlah keranjang dalam sesi setiap kali pembaruan dan kemudian menggunakannya di _getIdentifier().

Saya menemukan bahwa pengamat tidak konsisten untuk kereta. Sebagai tambahan, pembaruan acara dikirim tetapi untuk penghapusan, tidak. Jadi saya kira saya dapat menambahkan pengamat saya ke pembaruan harga penawaran, jika itu konsisten dalam memiliki pengamat?

Juga, saya memang membaca pembatalan Cache Halaman Penuh pada perubahan cart (quote) tetapi itu tetap menggunakan

Enterprise_PageCache_Model_Cookie::COOKIE_CART

yang tidak berfungsi dengan baik dalam kasus saya, meskipun saya pikir masalahnya ada di dalamnya. Apa / Bagaimana? Saya tidak yakin.

Juga versi EE saat ini yang telah kami jalankan bahkan tidak memiliki folder Tingkat Lanjut Model/Container. saya menggunakanEE 1.10.1.1

Ada saran?

Nirav Sheth
sumber
Tidak yakin, tapi saya pikir pertanyaan ini lebih terkait dengan Stack Overflow, tetapi bukan situs ini ...
Sergei Guk
2
Holepunching tampaknya digunakan di sini dalam pengertian non tradisional, dapatkah Anda menjelaskan fitur yang Anda coba terapkan tanpa menggunakan jargon?
Ralph Tice
1
Mengapa tidak menambahkan id keranjang pelanggan _getIdentifiersehingga blok tersebut unik untuk keranjang pelanggan, atau bahkan jumlah item dalam keranjang mereka?
B00MER
@SergeiGuk Yah ini sangat terkait dengan Magento
j0k
@RalphTice Saya mencoba menerapkan indikator nilai keranjang di header yang menunjukkan kepada pengguna berapa banyak item yang mereka miliki di kereta mereka. Karena nilai itu berbeda untuk setiap pengguna, saya tidak ingin itu di-cache.
Nirav Sheth

Jawaban:

3

Menggunakan Enterprise_PageCache_Model_Cookie::COOKIE_CARTadalah cara yang tepat untuk dilakukan, tetapi Anda mungkin perlu melakukan beberapa perubahan.

Enterprise_PageCache_Model_Observer::registerQuoteChangedipanggil pada setiap penawaran quote (termasuk perubahan nomor item) dan juga disebut dalam konteks pada Mage::app()sehingga Anda dapat mengakses semua data sesi. Timpa pengamat ini dan tambahkan lebih banyak data $this->_getCookie()->setObscuresehingga nilainya berubah kapan pun Anda perlu.

Paul Grigoruta
sumber
Adakah contoh yang mungkin Anda ingin bagikan untuk melakukan ini?
Nirav Sheth