Saya punya masalah yang tampaknya terkait dengan caching blok statis CMS.
Saya memiliki halaman cms dan di dalam halaman itu saya membuat sejumlah blok statis cms. Versi sederhana dari konten halaman CMS terlihat seperti ini:
<div class="cms-block-1">{{block type="cms/block" block_id="banner_home"}}</div>
<div class="cms-block-2">{{block type="cms/block" block_id="promo_home_1_1"}}</div>
<div class="cms-block-3">{{block type="cms/block" block_id="promo_home_1_2"}}</div>
<div class="cms-block-4">{{block type="cms/block" block_id="promo_home_2_1"}}</div>
<div class="cms-block-5">{{block type="cms/block" block_id="promo_home_2_2"}}</div>
<div class="cms-block-6">{{block type="cms/block" block_id="promo_home_2_3"}}</div>
<div class="cms-block-7">{{block type="cms/block" block_id="promo_home_3_1"}}</div>
<div class="cms-block-8">{{block type="cms/block" block_id="promo_home_3_2"}}</div>
Halaman dimuat seperti yang diharapkan segera setelah cache blok dihapus, halaman itu terlihat seperti ini:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_2_1 content</div>
<div class="cms-block-5">promo_home_2_2 content</div>
<div class="cms-block-6">promo_home_2_3 content</div>
<div class="cms-block-7">promo_home_3_1 content</div>
<div class="cms-block-8">promo_home_3_1 content</div>
Namun setelah halaman inital dimuat, setiap halaman berikutnya memuat konten tidak benar. Ini terlihat seperti ini:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_1_1 content</div>
<div class="cms-block-5">promo_home_1_2 content</div>
<div class="cms-block-6">promo_home_2_1 content</div>
<div class="cms-block-7">promo_home_2_2 content</div>
<div class="cms-block-8">promo_home_2_3 content</div>
Pada contoh kedua Anda dapat melihat dua promo pertama sudah benar, namun semuanya setelah itu menampilkan konten yang salah untuk block_id. Juga, blok promo_home_1_1 dan promo_home_1_2 keduanya diberikan dua kali dan promo_home_3_1 dan promo_home_3_2 tidak pernah diberikan. Ini seperti pemetaan antara block_id dan konten blok statis yang terkait sedang tercampur entah bagaimana. Ini terkait dengan caching seolah-olah blok cache tidak diaktifkan maka saya tidak lagi melihat masalahnya.
Juga, mungkin perlu dicatat bahwa halaman ini dulu berfungsi pada EE 1.13, namun setelah memutakhirkan ke EE 1.14.2 masalah ini sudah mulai terjadi.
Saya menyadari sangat sulit untuk mengatakan apa yang salah tanpa mengetahui apa lagi yang terjadi dalam sistem, tetapi saya berharap seseorang mungkin dapat memberi saya setidaknya beberapa arah lagi di sini karena saya kehabisan ide.
Memperbarui:
Saya juga mencoba ini dengan widget, mis
<div class="cms-block-1">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="63"}}</div>
<div class="cms-block-2">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="64"}}</div>
<div class="cms-block-3">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="65"}}</div>
Dalam hal ini ketiga blok mengembalikan konten yang sama walaupun id menunjuk ke blok yang berbeda dalam database. Ketika cache dihapus, blok yang dikembalikan terkadang akan berubah, tetapi ketiga widget masih akan memiliki konten yang sama.
sumber
Jawaban:
Ok jadi saya telah menemukan penyebab masalah ini dan sepertinya menjadi masalah di core magento.
Ada metode _construct baru yang ditambahkan ke Mage_Cms_Block_Block di magento 1.14.2 yang berisi kode berikut.
Ini secara efektif menyalakan caching untuk blok cms. Tidak ada kunci cache yang diatur sehingga jatuh kembali ke Mage_Core_Block_Abstract :: getCacheKeyInfo yang menggunakan nama blok dalam tata letak. Dalam hal ini kita sebenarnya tidak menggunakan file layout xml untuk menambahkan blok dan tidak ada set nama. Magento tampaknya mencoba dan menangani ini dengan menetapkan sesuatu seperti ANONYMOUS_78 sebagai namanya. Namun untuk beberapa alasan ini sepertinya tidak berfungsi 100% maka duplikat yang saya lihat.
Solusi saya adalah menimpa kelas Mage_Cms_Block_Block di ekstensi saya sendiri dan menambahkan metode baru untuk mengatur kunci cache secara eksplisit ke id blok daripada nilai yang ditugaskan. Kelasnya terlihat seperti ini:
Ini sepertinya telah menyelesaikan masalah.
Memperbarui:
Sepertinya masalah yang sama juga ada di CE 1.9.2
sumber
Untuk Pelanggan Magento EE, silakan minta tambalan SUPEE-5874 dari Tim Dukungan Magento Enterprise.
Ini akan memperbarui dua file
Saya tidak dapat memposting tambalan yang sebenarnya dari Magento karena ini milik mereka.
sumber
Senang di sini bahwa Magento sekarang men-cache blok statis juga. Karena versi yang ditingkatkan saat ini mencakup masalah aneh ini karena cache dari blok statis, Anda dapat menggunakan modul saya secara gratis.
Ekstensi ini dibuat untuk cache yang lebih baik dari blok statis. Ini juga mempertimbangkan apakah situs diamankan atau tidak. Juga ekstensi tidak memiliki penulisan ulang inti, yang membuat modul ini lebih baik.
Di sini Anda pergi .
Untuk ikhtisar ekstensi yang lebih baik, Anda dapat merujuk utas ini .
sumber
Kami telah menyediakan tambalan untuk CE, yang menyelesaikan masalah ini. Karena EE berbasis di CE, ini mungkin berlaku juga.
Anda dapat mengunduh jalur ini dari intisari saya: https://gist.github.com/tux-rampage/77b286f7973336877f7b
Turunkan inti, bongkar, dan jalankan perintah berikut di root magento Anda:
Uji ini pada lingkungan pementasan sebelum menerapkannya pada sistem langsung!
sumber