Как заставить закешированный CSS-файл переименоваться?

Допускаю, что вопрос тупой, но ответа пока мне никто не дал.

Всё знают, что в ЛС, независимо от шаблона и количества плагинов, генерируется некий собирательный CSS-файл, который потом и подключается к каждой странице:
<link rel='stylesheet' type='text/css' href='http://www.site.ru/templates/cache/new/5e30fbee88c09e7e63ef7d3833309448.css' />

Если кратко, то задача сделать так, чтобы этот файл поменял название и стало что-то вроде:
<link rel='stylesheet' type='text/css' href='http://www.site.ru/templates/cache/new/38335e30fbee3094488c09e7e63ef7d8.css' />

Но сколько я ни очищал кэш, этот файл перегенерируется с тем же именем. А Chrome, например, как закеширует однажды CSS, так и потом всё время его использует. Обновишь страницу — он вроде показывает новую версию, но проходит пять минут — и опять всё по-старому. Нужно, чтобы имя CSS-файла поменялось (альтернативный вариант — добавить что-то вроде ?v=2 после названия файла, но как это сделать?).

Вопрос: как мне переименовать закешированный CSS, чтобы все браузеры поняли, что файл изменился?

UPD: Кое-что есть здесь, но это не решает проблему (файл пересоздаётся с прежним именем).

17 комментариев

avatar
Не наблюдал таких проблем. Очищаешь кеш сайта и все нормально обновляется.
avatar
Вы правы. Вопрос тупой. Вот вам на него ответ livestreet.ru/blog/6608.html#comment95123
avatar
Зачем ради очистки двух папок устанавливать плагин?
avatar
Просто принцип наименьшего сопротивления. Иначе возникнет еще масса тупых вопросов. ИМХО.
avatar
Вопрос, может, и тупой, но не настолько всё-таки, чтобы я не знал, как сбросить кэш. Файл, который создаётся, имеет такое же имя, как и удалённый. Вопрос в том, как сделать так, чтобы он переименовался.
avatar
Ну вот, ТС изменил свой топик, а мне минус впаяли. А ведь в названии топика изначально присутствовало словосочетание «тупой вопрос». Как некрасиво. Я опечален.
avatar
Извините. Просто я подумал, что раз никто не знает, то вопрос не такой уж тупой :-)

P.S.: Я бы вам плюсик поставил, но не могу.
avatar
Менять что-то, нужно на локальном сервере с отключенным кешэм как в конфиге LS так и в браузере. А уже после того как убедились что все воркает гуд — ставить на «продакшен».
Или я что-то не так понял? :)
avatar
Наверное я сумбурно объяснил. Нужно сделать так, чтобы переминовался закэшированный файл стилей.

Чтобы вместо, к примеру:
<link rel='stylesheet' type='text/css' href='http://www.site.ru/templates/cache/new/5e30fbee88c09e7e63ef7d3833309448.css' />

стало:
<link rel='stylesheet' type='text/css' href='http://www.site.ru/templates/cache/new/8c09e7e630fbee883ef33309445e7d38.css' />

Как сам файл перегенерировать — я знаю. И как кэш чистить. Но вот как заставить его переименоваться — не знаю.
avatar
нашел один костыль интересный способ:),
имя файла генерится в Viewer.class.php, переменная $sCacheName

вот строка, у меня 875
$sCacheName = $sCacheDir."/".md5(serialize($aFiles).'_head').".{$sType}";

ну а дальше все зависит от возможностей, я _head изменил на _head1, после этого имена кешированных JS и CSS файлов изменились.
  • lom
  • 0
avatar
совсем забыл, MY Current version of LiveStreet: 0.4.2
avatar
Не знаю, насколько эта тема актуальна, но вот недавно столкнулись сами. А так как Google кидает в первую очередь на этот топ, то решили черкнуть пару строк (в контексте LS 1.0.3)

1. Предложенный выше plugin, хоть и работает но тормозит не приемлемо.
2. Монстр образную админку ради такой ерунды запускать? — тоже не очень вариант.

Самое «чистое» решение к которому в итоге пришли это «дерганье» конфигурации шаблона, которая тут:
/templates/skin/MYSKIN/settings/config/config.php
Там, собственно, в переменной $config['head']['default']['css'] перечисленны CSS-ы. и любое изменение этого массива (добавить новый CSS, убрать существующий, поменять порядок) -вызывает пере-генерацию «сжатого» файла с новым именем.

Можно просто создать пустой файл с расширением .CSS внести его в конфиг — и вуаля. Решение коненчо не очень идеальное, но уж лучше чем .php исходники движка ковырять.
avatar
Обычный timestamp решит проблемы с уникальностью.
avatar
Совершенно не понятно, что вы имеете ввиду.
avatar
На самом деле немного удивлен, почему не сделано так. Это обычная практика. Добавление текущего времени в хэш.
$sCacheName = $sCacheDir."/".md5(serialize($aFiles).'_head' . time()).".{$sType}";
avatar
Подскажите, а зачем это (смена имени файла) может быть нужно?
avatar
Если у вас на сайте активирована компрессия css файлов в один, то если вы произведете изменения в одном из css файлов, почистите кэш, заново произойдет перекомпрессия, а названия файла не поменяется. Для того что бы обновился кэш этого файла в браузере нужно будет обновить страницу, для вас это очевидно, а у пользователей может отобразиться каша из html кода(или просто изменения стилей) не подкрепленная новыми стилями записанными или измененными вами.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.