При внесении изменений на сайты мы часто сталкиваемся с тем, что содержимое страниц, css-файлов и скриптов (.js) кэшируется браузером и остается неизменным довольно долгое время. Это приводит к тому, что для того, чтобы внесенные изменения отобразились во всех браузерах, нужно приучать клиентов к сложным комбинациям F5 или Ctrl + F5. И время от времени следить за тем, чтобы они нажимались.
Процесс довольно нудный и неудобный. Можно конечно выйти из ситуации, переименовывая каждый раз файлы, но опять же неудобно.
Однако есть способ, который позволит остаться при прежних именах, и сбрасывать кеширование .css или .js файлов в тот момент, когда это будет нужно нам. И навсегда забыть о Ctrl + F5.
Суть состоит в том, что мы будем приписывать к нашим .css или .js файлам в конце псевдопараметр, который будем менять время от времени, тем самым сбрасывая кэш в браузере.
Таким образом, запись в исходном коде теперь будет выглядеть так:
<link rel="stylesheet" href="style.css?186485"> <script type="text/javascript" src="script.js?186485"></script>
Где 186485 - произвольная комбинация, которая выведет тот же файл, но браузер интерпретирует его как новый, благодаря псевдопараметру ?186485
Теперь, чтобы каждый раз не менять все вхождения нашего параметра, зададим его в php-файл, загрузим его в корень сайта, и который подключим во все нужные нам места:
<link rel="stylesheet" href="style.css?<?include '/param.php';?>"> <script src="script.js?<?include '/param.php';?>"></script>
Содержимое файла param.php может быть произвольным:
8339348
Готово! Теперь, при изменении файла param.php кэширование файлов будет сбрасываться.
Чтобы файлы вообще не кешировались, можно в содержимом файле param.php вызвать функцию rand() - которая будет выдавать случайное число каждый раз при загрузке.
То же самое и с картинками: рассмотрим URL вида: http://site.ru/img.jpg?12345 Таким образом, обновив код 12345 на какое-то другое число, мы дадим понять браузеру, что картинку надо обновить, и он загрузит её снова. Однако на практике вряд ли стоит пользоваться данным приёмом для картинок, т.к. возрастает нагрузка на сервер и снижается скорость загрузки страниц.
А что в Joomla?
Здесь за нас уже всё продумали разработчики, и нам лишь следует придерживаться принятого синтаксиса:
JHtml::_('stylesheet', 'template.css', array('version' => 'auto', 'relative' => true)); JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true));
Указанный код подключит css файл template.css (либо template.js для файла со скриптами) из папки вашего шаблона. Вместо 'version' => 'auto' можно установить любое значение, например 'version' => '1.1' - на выходе этот параметр будет следовать при подключении файла, после знака вопроса.
Параметр relative => true означает, что система будет пытаться найти указанный файл в папке шаблона. Если укажем relative => false, то потребуется указать полный путь к .css или .js файлу
Важно понимать, что в данном случае 'version' => 'auto' не будет отслеживать изменения, сделанные в файле.
Чтобы подключаемые файлы вообще не кешировались - можно задать version случайное число через функцию rand(), в итоге будет: JHtml::_('stylesheet', 'template.css', array('version' => rand(), 'relative' => true));