MODX. Добавление файлам стилей и скриптов версии (?v=)

Оглавление

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

Версия файла указывается для тех файлов, которые мы часто изменяем, нет смысла заставлять пользователей каждый раз перекачивать например библиотеки которые мы используем.

Например, мы можем указать версию для файла пользовательских скриптов и стилей, а библиотеки не трогать.

В системных настройках в разделе core (/manager/?a=system/settings) создаём новый параметр:

Ключ - cache_version
Имя - Версия кэша
Описание - Служит для обновления файлов на стороне клиентов
Значение - Любой набор цифр, перезапишется при первом сбросе на нормальное
Тип поля - Текстовое поле
Пространство имён - core
Словарь - Кэширование

Создаем плагин на событие OnBeforeCacheUpdate . Таким образом плагин будет срабатывать когда мы будем очищать кэш сайта.

<?php
    if ($modx->event->name == 'OnBeforeCacheUpdate') {
        $now = date("mdyHis");
        $cache_version = $modx->getObject('modSystemSetting', 'cache_version');
        $cache_version->set('value', $now);
        $cache_version->save();
    }
?>

Теперь остаётся лишь применить к нужным файлам, например

    <link rel="stylesheet" href="/assets/template/css/main.css?v=[[!++cache_version]]">
    <script defer src='/assets/template/js/main.js?v=[[!++cache_version]]'></script>

В исходном коде страницы мы увидим подключение в таком формате

    <link rel="stylesheet" href="/assets/template/css/main.css?v=040222171829">

При очистке кэша в админ панели будет так же меняться версия файлов и при посещении сайта файлы у клиентов скачаются заново.