Magento mağazasında üstbilginin delinmesi


10

Magento'da üstbilginin delinmesini uyguladım ve müşteri bazında çalışmama rağmen, farklı sepeti öğe sayıları üzerinde çalışmasını sağlayarak bu seviyeyi daha derine getirme yeteneğine ihtiyacım var.

İşte kodum.

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

}

Magento'daki delik delme iş parçacıklarından okuduğumdan benim anlayışım, FPC önbelleği isteği sunarken Mage uygulamasının başlatılmamasıdır, bu nedenle temelde bir yer tutucu özniteliği ekleme yöntemi çalışamaz, çünkü

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

çalışmaz, değil mi?

Ve nasıl olması gerektiği gibi olsa da, die()oraya bir çağrı yerleştirdiğim gibi hiç çalışmıyor gibi görünüyordu ama hiçbir şey olmadı.

Peki eksik olan ne? Önbellek kimliğini oluşturmak için kullanılabilmesi için alışveriş sepeti öğelerinin sayısını nasıl alabilirim?

İlerleme Durumu: Buldum

Enterprise_PageCache_Model_Cookie::COOKIE_CART

ancak bu, sepet güncellenmesi üzerine yalnızca bir kez değişir. Bundan sonra aynı kalır. Bu garip, çözüm gibi geliyor ama davranışı aksini söylüyor.

Oturumda alışveriş sepeti öğelerini de bulamadım. Bu yüzden şu anda bunu yapmanın tek yolu, her güncellemede sepeti miktarını kaydetmek ve daha sonra kullanmak olacaktır _getIdentifier().

Gözlemcilerin araba için tutarsız olduğunu buldum. Ayrıca, olayların güncellenmesi gönderilir, ancak kaldırılması için gönderilmez. Yani sanırım gözlemcimi teklifin fiyat güncellemesine ekleyebilirim, eğer gözlemcilerin tutarlı olması durumunda?

Ayrıca, Tam Sayfa Önbellek geçersiz kılma geçersizleştirme (alıntı) değişikliği okudum ama itt kullanarak kolları

Enterprise_PageCache_Model_Cookie::COOKIE_CART

bu benim durumumda iyi çalışmıyor, ancak sorunun içinde olduğunu düşünüyorum. Ne nasıl? Emin değilim.

Ayrıca çalıştırdığımız EE'nin mevcut sürümü altında Gelişmiş klasörü bile yok Model/Container. Ben kullanıyorumEE 1.10.1.1

Herhangi bir öneri?


Emin değilim, ama bu sorunun daha fazla Stack Overflow ile ilgili olduğunu düşünüyorum, ancak bu site ile değil ...
Sergei Guk

2
Delik delme burada geleneksel olmayan bir anlamda kullanılıyor gibi görünüyor, jargon kullanmadan uygulamaya çalıştığınız özelliği açıklayabilir misiniz?
Ralph Tice

1
Neden müşteri sepeti kimliğini _getIdentifier, blok müşteri sepeti veya hatta sepetindeki öğe sayısı için benzersiz olsun diye eklemiyorsunuz?
B00MER

@SergeiGuk Magento
j0k

@RalphTice Kullanıcıya sepetlerinde kaç öğe olduğunu gösteren başlıkta bir sepet değeri göstergesi uygulamaya çalışıyorum. Bu değer kullanıcı başına farklı olduğundan, önbelleğe alınmasını istemiyorum.
Nirav Sheth

Yanıtlar:


3

Kullanmak Enterprise_PageCache_Model_Cookie::COOKIE_CARTdoğru yoludur, ancak bazı değişiklikler yapmanız gerekebilir.

Enterprise_PageCache_Model_Observer::registerQuoteChangeher teklif kaydında (öğe numarası değişikliği dahil) çağrılır ve Mage::app()tüm oturum verilerine erişebilmeniz için bağlamda da çağrılır . Bu gözlemcinin üzerine yazın ve daha fazla veri ekleyin, $this->_getCookie()->setObscureböylece ihtiyacınız olduğunda değer değişir.


Bunu yaparken paylaşmak isteyebileceğiniz örnekler var mı?
Nirav Sheth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.