При внесении изменений на сайты мы часто сталкиваемся с тем, что содержимое страниц, 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));