Как получить автоматическое управление версиями для CSS, JS, файлов изображений в Smarty?
Как получить автоматическое управление версиями для CSS, JS, файлов изображений в Smarty?
как это
<link rel="stylesheet" href="css/main.css" media="all"/>
к этому
<link rel="stylesheet" href="css/main354435.css" media="all"/>
2 ответа
Я полагаю, это необходимо для предотвращения кэширования на стороне клиента. Наиболее удобный способ (по крайней мере для меня) - использовать что-то вроде:
<link rel="stylesheet" href="css/main.css?version=123456" media="all"/>
Таким образом, при каждом изменении версии браузеры клиентов будут загружать новую версию.
Я бы не стал этого делать с Smarty, управление версиями должно выполняться в VCS, для этого и нужна VCS. В сочетании с хорошей системой сборки, вы были бы лучше.
Мой обычный рабочий процесс проекта выглядит так:
Используйте phing для генерации ваших сборок, я объясню комбинацию с Subversion, но ее можно адаптировать и для других CVS.
При генерации билда phings SvnLastRevisionTask
хранит последнюю ревизию:
<svnlastrevision
svnpath="/your/installation/svn.exe"
repositoryurl="http://your/svn/repository/url/"
propertyname="svn.lastrevision"/>
я использую ReplaceTokens
изменить специальную переменную ##LASTREV##
в моем файле параметров кода. Использование его в файле параметров облегчает управление им, и моему php-коду просто нужна переменная без необходимости фильтрации в следующем примере. Вам просто нужно отфильтровать файл параметров.
<filterchain>
<replacetokens begintoken="##" endtoken="##">
<token key="LASTREV" value="${svn.lastrevision}" />
</replacetokens>
</filterchain>
Затем переместите все файлы, которым нужен этот номер (MoveTask
):
<move file="css/main.css"
tofile="css/main${svn.lastrevision}.css"
overwrite="true"/>
Требуется некоторое время, чтобы правильно построить файл сборки для вашего проекта, но как только вы его настроите, это сэкономит много времени, и вам не нужно слишком беспокоиться об условиях кэширования на сервере, на котором будет работать ваш проект. на.