Управление кешем файлов стилей и скриптов

05.10.2020
3759
Теги: MODx RevoCSSJS

Приветствую, дорогие друзья! В данной статье я решил рассказать о том, как решить проблему с обновлением скриптов и стилей у пользователей сайта (в частности, заказчика). Пойдем мы с вами двумя путями: сделаем версию для стандартного парсера MODX и для Fenom.

Для того, чтобы обновить кеш браузеров пользователей достаточно в дополнение к файлу передать какой-либо GET-параметр, тогда браузер решит, что файл изменился и загрузит новую версию. Сделать это можно, например, так:

<link rel="stylesheet" href="assets/css/style.css?time=3">

Как видите у нас передан GET-параметр time со значением 3. Конечно, после каждого изменения файла style.css можно изменять значение этого GET-параметра для обновления кеша у пользователей, но, как вы понимаете, это не совсем удобно. Тогда на помощь к нам приходит функция php filemtime(), которая возвращает время последнего изменения файла в формате временной метки Unix (количество секунд, которые прошли с полуночи 1 января 1970 года до настоящего времени). С ее помощью мы можем оптимизировать этот процесс.

Стандартный парсер MODX.

Если вы используете стандартный парсер MODX, то вы можете использовать фильтры ввода и вывода. Для этого, сначала создадим сниппет versions со следующим кодом:

<?php
if(isset($input)) {
   $file = MODX_BASE_PATH.$input;
   if (file_exists($file)) {
     return $input.'?v='.filemtime($file);
   }else{
    return $input;
   }
}else{
    return $input;
}

Вы можете использовать, например, ClientConfig или системные настройки, где сможете указать пути до файлов скриптов и стилей. Я сделал это через системные настройки.

MODX Revo - настройка мультиязычности

Теперь мы можем вызвать модификатор ввода вывода, например, для файлов стилей это будет выглядеть так:

<link rel="stylesheet" href="[[++base_css:versions]]">

Или можно передать значение напрямую в сниппет:

<link rel="stylesheet" href="[[!versions? &input=`assets/css/style.css`]]">

В итоге, мы с вами увидим, что в путь с помощью сниппета передался GET-параметр v с датой последнего изменения файла.

Fenom.

С парсером Fenom все проще. Создаем плагин на событие pdoToolsOnFenomInit:

<?php
switch($modx->event->name){
	case "pdoToolsOnFenomInit":
		$fenom->addModifier('versions', function($input){
			if(isset($input)) 
				return $input.'?v='.filemtime(MODX_BASE_PATH.$input);
		});		
		break;
}

И теперь мы можем применять его прямо к строке:

<link rel="stylesheet" href="{'assets/css/style.css' | versions}">

Все! Теперь мы защитим себя от лишних вопросов и сэкономим свое время при общении с заказчиками.

Управление кешем файлов стилей и скриптов

0 Число голосов: 9
4
5
1
9

Комментарии ()

Ваш комментарий будет первым!

Наши клиенты

Многие компании уже доверяют нам. Будьте в их числе!

Хотите реализовать проект?

Контакты

Напишите нам - мы расскажем вам много интересного!


Пермь, шоссе Космонавтов 252, офис 218