Misalkan kita telah mengubah banyak fungsi untuk modul (templat, layout, CSS) dan kami akan memindahkan perubahan ini ke situs produksi, tetapi banyak pelanggan yang telah menembolokkan CSS di browser mereka. Jadi ini pertanyaannya. Cara memaksa cache CSS klien flush dan menghindari penggantian nama file ( styles.css
-> styles-v2.css
). Ada satu cara logis tetapi tidak berfungsi di Magento, karena memeriksa file yang ada (dengan cara metode ini bekerja untuk file JS), lihat di bawah:
<action method="addCss">
<stylesheet>css/styles.css?1</stylesheet>
</action>
Ada ide?
Anda dapat menggunakan Modul OpenSource Aoe_JsCssTstamp yang menambahkan informasi timestamp ke file CSS yang digabungkan. Cap waktu untuk file CSS biasa (tidak digabungkan) belum didukung, tetapi ini akan mudah diimplementasikan.
sumber
Ada ekstensi gratis di github 'Magento Cachebuster' yang melakukan ini. Itu kembali
https://github.com/gknoppe-guidance/magento-cachebuster
sumber
Saya menggunakan ekstensi saya sendiri, Speedster Advanced untuk ini. Tetapi prinsip dasarnya adalah bahwa nama file css dan js yang digabung termasuk stempel waktu dari file yang terakhir dimodifikasi - lihat
Mage_Core_Model_Design_Package::getMergedCssUrl()
. Setiap kali Anda mengedit file css, nama file baru dibuat yang menyebabkan browser meminta file baru alih-alih menggunakan kembali versi yang di-cache. Karena blok kepala Anda mungkin di-cache, refresh cache Magento diperlukan.sumber
Saya juga telah mengimplementasikan cache buster untuk file css. Cara terbaik yang saya kira adalah untuk memperpanjang Mage_Page_Block_Html_Head dan naik fungsi di bawah ini dan memperbarui array $ skinItems dengan perubahan yang Anda inginkan.
Dapatkan inspirasi dari sini. Sumber
sumber
Ada solusi sederhana namun rumit yang tidak memerlukan plugin apa pun dan hanya menggunakan kemampuan Magento bawaan - berguna jika Anda hanya perlu dengan cepat melakukannya di situs yang sudah ada tanpa ingin mengambil risiko memasang kode lagi.
Idenya adalah bahwa Anda dapat menggunakan sistem CSS gabungan untuk menghasilkan nama file penghilang cache.
Karena nama file CSS yang digabungkan adalah hash dari semua file yang digabung bersama, Anda cukup menambahkan file css kosong tambahan ke dalam tema dengan cap tanggal untuk sebuah nama.
Begitu:
<action method="addCss"><stylesheet>css/cachebust_091014.css</stylesheet></action>
Sekarang dorong itu hidup dan siram cache magento, file css yang digabungkan sekarang akan memiliki nama yang berbeda dan cache Anda akan rusak!
Ini rumit karena setiap kali Anda ingin memecahkan cache, Anda perlu mengubah nama file itu, tetapi tidak memerlukan apa pun selain kemampuan Magento bawaan sehingga berguna jika Anda menemukan diri Anda macet dan perlu perbaikan cepat!
sumber
=> Alih-alih menggunakan kode ini:
=> Coba gunakan kode ini:
Tapi itu tidak terlalu bagus ...
sumber
Saya menemukan modul yang akan menambahkan string kueri ke akhir semua CSS dan JS dalam tata letak xml. String kueri dapat dikonfigurasi dari admin.
https://github.com/mklooss/Loewenstark_Head
Ide dasarnya adalah menimpa
_prepareStaticAndSkinElements
untuk memasukkan string kueri, seperti yang dilakukan dalam modul, yang ditunjukkan di bawah.sumber
Jika saya memahami solusi yang diajukan dalam pertanyaan Anda, Anda dapat melakukannya dengan sedikit mod ke file inti ( tidak benar-benar mengedit file inti ):
Tambahkan sesuatu seperti? V = 1 ke baris 198 sehingga semua file css ditambahkan ini:
sumber
Saya pikir Fooman Speedster Advanced ( http://www.magentocommerce.com/magento-connect/fooman-speedsteradvanced-4030.html ) bisa menjadi solusi:
"Sepenuhnya otomatis setelah diinstal, dengan versi otomatis ketika file Javascript / CSS diperbarui"
sumber
Saya telah membuat modul gratis untuk ini:
http://www.magentocommerce.com/magento-connect/frontend-flush-2048.html
Tolong beri tahu saya jika itu tidak berfungsi seperti yang diharapkan tetapi saya telah membangunnya sehingga file gabungan js dan css akan memiliki hash yang berbeda jika konten dari salah satu file gabungan telah berubah. Secara default Magento hanya mengubah hash dari file gabungan jika nama file dari salah satu file yang disertakan telah berubah.
MEMPERBARUI
Saya juga membuat modul minify gratis dan sederhana untuk Anda yang memercayainya.
http://www.magentocommerce.com/magento-connect/minify-7771.html
sumber
Ada modul yang sangat bagus yang dibuat oleh Fabrizio Branca yang melakukan hal yang Anda minati. Namanya AOE_JsCSSTStamp . Apa itu? Ini menambahkan cap waktu untuk sumber daya CSS dan JS. Ketika Anda menyiram cache CSS / JS maka cap waktu akan dibuat kembali.
Browser akan melihat nama file yang berbeda - itu sebabnya ia akan mengunduh ulang sumber daya lagi dan disajikan dengan yang paling baru alih-alih di-cache di browser.
sumber
Cukup edit metode getCssJsHtml di Mage_Page_Block_Html_Head , tambahkan string seperti ini selama beberapa hari setelah mengedit css dan itu saja ... itu hanya berfungsi
sumber
Beberapa tahun kemudian dan tidak menemukan ekstensi yang berguna yang tidak akan menggabungkan file dan sederhana, saya membuat sendiri. Gagasan utamanya adalah setelah membersihkan cache, itu akan memperbarui Timestamp. Jadi dengan kata lain - ketika Anda mengubah beberapa
css/js
, cukup flush cache dan Timestamp akan diperbarui.sumber
Buat salinan tema Anda dengan nama baru (themev2) - kulit dan aplikasi / desain, dll. Kemudian pilih tema baru di admin.
sumber