Załóżmy, że zmieniliśmy wiele funkcji modułu (szablony, układy, CSS) i zamierzamy przenieść te zmiany na stronę produkcyjną, ale wielu klientów ma buforowane CSS w swoich przeglądarkach. Oto pytanie. Jak wymusić opróżnianie pamięci podręcznej CSS klienta i unikanie zmiany nazwy pliku ( styles.css
-> styles-v2.css
). Jest jeden logiczny sposób, ale nie działa on w Magento, ponieważ sprawdza istniejący plik (tak jak ta metoda działa dla plików JS), patrz poniżej:
<action method="addCss">
<stylesheet>css/styles.css?1</stylesheet>
</action>
Jakieś pomysły?
Możesz użyć modułu OpenSource Aoe_JsCssTstamp, który dodaje informacje o znacznikach czasu do scalonych plików CSS. Znaczniki czasu dla zwykłych (niepołączonych) plików CSS nie są jeszcze obsługiwane, ale byłoby to łatwe do wdrożenia.
źródło
Na github „Magento Cachebuster” znajduje się bezpłatne rozszerzenie, które właśnie to robi. To dotyczy
https://github.com/gknoppe-guidance/magento-cachebuster
źródło
Używam do tego własnego rozszerzenia Speedster Advanced. Ale podstawową zasadą jest to, że nazwa scalonych plików css i js zawiera znacznik czasu ostatnio zmodyfikowanego pliku - patrz
Mage_Core_Model_Design_Package::getMergedCssUrl()
. Za każdym razem, gdy edytujesz dowolny plik css, tworzona jest nowa nazwa pliku, co powoduje, że przeglądarki żądają nowego pliku zamiast ponownego użycia wersji z pamięci podręcznej. Ponieważ blok głowy może być buforowany, konieczne jest odświeżenie pamięci podręcznej Magento.źródło
Zaimplementowałem również narzędzie do usuwania pamięci podręcznej dla plików css. Myślę, że najlepszym sposobem jest rozszerzenie Mage_Page_Block_Html_Head i najechanie na poniższą funkcję i zaktualizowanie tablicy $ skinItems o pożądane zmiany.
Mam inspirację stąd. Źródło
źródło
Istnieje proste, ale uciążliwe obejście, które nie wymaga żadnych wtyczek i po prostu korzysta z wbudowanych funkcji Magento - przydatne, jeśli po prostu musisz to zrobić szybko na istniejącej stronie bez ryzyka instalowania dodatkowego kodu.
Chodzi o to, że możesz użyć scalonego systemu CSS do wygenerowania nazwy pliku pomijania pamięci podręcznej.
Ponieważ nazwa scalonego pliku CSS jest skrótem wszystkich plików, które są scalane, po prostu dodajesz do motywu dodatkowy pusty plik css z datownikiem dla nazwy.
Więc:
<action method="addCss"><stylesheet>css/cachebust_091014.css</stylesheet></action>
Teraz pchnij to na żywo i opróżnij pamięć podręczną magento, scalony plik css będzie teraz miał inną nazwę, a twoje pamięci podręczne zostaną zniszczone!
Jest to kłopotliwe, ponieważ za każdym razem, gdy chcesz zepsuć pamięć podręczną, musisz zmienić nazwę tego pliku, ale nie wymaga to nic innego niż wbudowane funkcje Magento, więc jest to przydatne, jeśli utkniesz i potrzebujesz szybkiej poprawki!
źródło
=> Zamiast używać tego kodu:
=> Spróbuj użyć tego kodu:
Ale to nie jest bardzo miłe ...
źródło
Znalazłem moduł, który doda ciąg zapytania na końcu wszystkich CSS i JS w układach xml. Ciąg zapytania można skonfigurować od administratora.
https://github.com/mklooss/Loewenstark_Head
Podstawowym pomysłem jest zastąpienie,
_prepareStaticAndSkinElements
aby uwzględnić ciąg zapytania, jak to zrobiono w module pokazanym poniżej.źródło
Jeśli rozumiem proponowane rozwiązanie w twoim pytaniu, możesz to zrobić za pomocą niewielkiej modyfikacji pliku podstawowego ( tak naprawdę nie edytuj pliku podstawowego ):
Dodaj coś w rodzaju? V = 1 do wiersza 198, aby wszystkie pliki css miały dołączone:
źródło
Myślę, że Fooman Speedster Advanced ( http://www.magentocommerce.com/magento-connect/fooman-speedsteradvanced-4030.html ) może być rozwiązaniem:
„Po instalacji w pełni zautomatyzowany, z automatyczną wersją po aktualizacji plików Javascript / CSS”
źródło
W tym celu zbudowałem bezpłatny moduł:
http://www.magentocommerce.com/magento-connect/frontend-flush-2048.html
Daj mi znać, jeśli nie działa zgodnie z oczekiwaniami, ale zbudowałem go tak, aby połączone pliki js i css miały inny skrót, jeśli zawartość jednego z połączonych plików uległa zmianie. Domyślnie Magento zmienia skrót mieszanego pliku tylko wtedy, gdy zmieniła się nazwa jednego z dołączonych plików.
AKTUALIZACJA
Stworzyłem również bezpłatny i prosty moduł minify dla tych z was, którzy w to wierzą.
http://www.magentocommerce.com/magento-connect/minify-7771.html
źródło
Jest naprawdę fajny moduł stworzony przez Fabrizio Branca, który robi dokładnie to, co Cię interesuje. Nazywa się AOE_JsCSSTStamp . Co to robi? Dodaje znacznik czasu do zasobów CSS i JS. Po opróżnieniu pamięci podręcznej CSS / JS znaczniki czasu są ponownie tworzone.
Przeglądarka zobaczy inną nazwę pliku - dlatego ponownie pobierze zasoby i zostanie udostępniona w najnowszej wersji zamiast buforowanej w przeglądarce.
źródło
Po prostu edytuj metodę getCssJsHtml w Mage_Page_Block_Html_Head , dodaj taki ciąg przez kilka dni po edycji css i to wszystko ... to po prostu działa
źródło
Kilka lat później i nie znajdując żadnego przydatnego rozszerzenia, które nie scaliłoby plików i jest proste, stworzyłem własne. Główną ideą jest to, że po opróżnieniu pamięci podręcznej zaktualizuje znacznik czasu. Innymi słowy - kiedy zmienisz niektóre
css/js
, po prostu opróżnij pamięć podręczną, a znacznik czasu zostanie zaktualizowany.źródło
Utwórz kopię motywu pod nową nazwą (themev2) - zarówno skórką, jak i aplikacją / projektem itp. Następnie wybierz nowy motyw w panelu administratora.
źródło