Как можно узнать об изменении файла и внести в чанк/сниппет изменения?

Приветствую.

Не знаю, знаете ли вы о таком понятии, как «cache busting», но я о нем узнал сегодня. Раньше знал о такой штуке, но не применял. А теперь хотелось бы применить, но стооолько вопросов появилось о том, как это реализовать в MODX. Если посоветуете, что-то дельное, буду признателен.

В общем, есть стандартный вариант: внутри чанка ссылка на подключение стилей, этот чанк вставлен в шаблон. Все просто.

А теперь сложная часть. Стили в файле поменял. Как можно поменять и ссылку на стили в чанке, т. е. добавить ей параметр, к примеру, ...styles.css?version_x...? Можно сделать это и ручками, но этот вариант мне не подходит — хотелось бы все автоматизировать и так. А вот как это сделать, я уже не понимаю.

Если знаете конкретные оптимальные решения, буду признателен за них.
weranda
28 июля 2023, 10:41
modx.pro
1
526
0

Комментарии: 8

Андрей Шевяков
28 июля 2023, 11:26
3
+3
1) Создать плагин versions
<?php
switch($modx->event->name){
	case "pdoToolsOnFenomInit":
		$fenom->addModifier('versions', function($input){
			if(isset($input)) 
				return $input.'?v='.filemtime(MODX_BASE_PATH.$input);
		});		
		break;
}

2) Вешаем на событие pdoToolsOnFenomInit


3) Вызываем файлики так:
<link rel="stylesheet" href="{'/assets/templates/shop/styles/style.css' | versions}">
<script src="{'/assets/templates/shop/js/script.js' | versions}"></script>

У кого-то подсмотрел не помню точно. Но легко гуглится, сможете найти.
Пользуюсь много лет, ни разу не подвел.
    Николай Савин
    28 июля 2023, 11:48
    0
    Тоже этим вариантом пользуюсь много лет. Отлично себя показывает. Кэширует все стили ровно до того момента, как они изменятся
      Дмитрий
      29 июля 2023, 11:47
      0
      Отличный плагин, необходимый. А на стандартный синтаксис как такое сделать?
          Дмитрий
          29 июля 2023, 12:21
          0
          Спасибо. Возможно я неправ, но в данном способе для fenom всё по красоте сделано, без лишних записей в системные настройки) я думал, что также можно и для стандартного синтаксиса сделать… Видел ещё вот такой способ arahort.pro/blog/modx-izmenenie-versii-fajlov-cssjs/ но тут есть ещё один минус: версия будет прописываться одинаковая для всех файлов, к которым будет примерен плагин…
            Андрей Шевяков
            29 июля 2023, 12:26
            0
            Там по ссылке для стандартного парсера можно так вызывать:
            <link rel="stylesheet" href="[[!versions? &input=`assets/css/style.css`]]">
            В таком варианте не надо записывать в системные настройки.
              Дмитрий
              29 июля 2023, 12:43
              0
              Да, разобрался, спасибо вам за подсказку.
      weranda
      29 июля 2023, 07:19
      0
      Спасибо вам, обязательно попробую.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8