Önbellekte Engelle = false ürün görünüm sayfasında gösterilmiyor


21

Magento2-1.0.0-beta4 kullanıyorum

checkout.rootBloğu app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xmlürün sayfasına kopyaladım .

Ben etkinleştirene kadar her şey iyi çalışıyor page_cache. Bu blok cacheable="false"Düzen XML’de.

Şimdi ürün sayfamı açtığımda, blok hiç işlenmiyor.

Sayfa önbelleğini doğru anladıysam, bu tür blokları AJAX çağrısı ile yüklemelidir. Ancak ara noktama asla ulaşılmadığı için böyle bir AJAX çağrısı gerçekleşmiyor \Magento\PageCache\Controller\Block\Render::execute.

Açarken /checkout/veya /checkout/cart/her şey çalışıyor. Fakat aynı zamanda bir AJAX çağrısı olduğu da görülmüyor. Bunun yerine, sayfanın tamamı önbellekten oluşturulmuş gibi görünmüyor, bu durum sepete göre anlamlı.

Bu yüzden sadece ürün görünümü sayfasını hariç tutmalıdır page_cache? Ama bunu yapmanın bir yolunu bulamadım?

Yanıtlar:


15

Bu sorun Magento 2.0.0 Kararlı üzerinde hala yeniden üretilebilir.

Magento 2 istisna işlemlerinde, diğer tüm bloklar hala oluşturulmuşken kırık blokların oluşturulmasını önleyen bir özellik vardır. Geliştirici modunda devre dışı bırakılır ve tüm istisnalar doğrudan tarayıcıda görüntülenir. Varsayılan ve üretim modlarında, blok oluşturma sırasında kural dışı durum oluşursa, blok çıktıdan kaldırılır (karşılık gelen istisna hala var / log / system.log dosyasına kaydedilir ). Bakın \Magento\Framework\View\Layout::renderNonCachedElement().

Aşağıdaki istisna ürün sayfasında ödeme blok oluşturma sırasında ortaya çıkan ve bu blok eksik yüzden: main.CRITICAL: No such entity with customerId = [] [].

Bunun istisnasının nedeni, oturum deposundaki customerLoggedIn == truemüşteri verilerinin \Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXml()yürütmeden sonra tutarsız durumda olması ( ve müşteri verilerinin eksik olması) . Bu eklenti mevcut PHP oturumunu kapatır ve böylece müşteri verilerini oturum depolama alanından kaldırır. Bu yalnızca sayfa tamamen önbelleğe alınabiliyorsa gerçekleşir (ve aslında öyleyse).

Sayfa, sayfa düzeni önbellek modülü tarafından yalnızca düzeninde bloklar yoksa, önbelleklenebilir olarak kabul edilir cacheable="false". Bu özelliğin eklenmesi bu bloğu Ajax tarafından yükleyemez (soruda belirtildiği gibi). Ajax tarafından bir bloğun yüklenebilmesi için, bu bloğun , sayfada _isScopePrivateayarlanmış truehiçbir blok bulunmaması gereken bir özellik olduğunu beyan etmesi gerekir cacheable="false". Bkz \Magento\PageCache\Observer\ProcessLayoutRenderElement::execute()ve mage.pageCache._replacePlaceholder()içinde Magento / PageCache / görünüm / kullanıcı arayüzü / web / js / sayfa cache.js . Ayrıca sayfa önbellek modülü benioku sayfasındaki üst düzey belgeleri kontrol edin

Ürün sayfası, cacheable="false"ödeme bloğu için ayarlandığından önbelleklenmemelidir , ancak bilinen sorun nedeniyle Önbelleklenebilir olmayan blokların önbelleğe alınması . Bu sorun çözülene kadar , aşağıdaki geçici çözüm kullanılabilir (bana neden işe yaradığını sorma, uzun bir hikaye):

  1. Git \Magento\Framework\Pricing\Render\Layout::__construct
  2. Değişim ['cacheable' => $generalLayout->isCacheable()]için['cacheable' => false]

Bu zarar vermemelidir, çünkü ürün sayfaları ödeme bloğu ekledikten sonra herhangi bir şekilde önbelleğe alınmaz

Başka bir soru, ürün sayfalarını yerleşik sayfa önbelleği veya Vernik ile önbelleğe alınamaz hale getirmek istiyor musunuz?


1
En son magento2 sürümünde bu sorun için herhangi bir güncelleme var mı? @Alex
Keyur Shah

Alex, sadece bir phtml önbellekten kaldırmak istiyorum. ve bu html dosyası başlık kabına çağırır. Herhangi bir fikir lütfen bana bildirin
Camit1dk
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.