Главная страница / DataLife Engine / Плагины / Обновление CSS и JS без очистки кеша

Обновление CSS и JS без очистки кеша

01 марта 2021, Понедельник
1 906
13
Обновление CSS и JS без очистки кеша

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

Собственно, сама хак:
Идем в /engine/modules/main.php (в DLE 13+ это всё нужно сделать через создание плагина) и перед:
echo $tpl->result['main'];

Вставляем:
### CSS/JS ###
preg_match_all("#<(link|script).+?(href|src)=('|\")(".$config['http_home_url']."|/)(.*?(\.css|\.js))\\3.*?>#i", $tpl->result['main'], $jscssarr);
if(!empty($jscssarr[5])) {
	foreach ($jscssarr[5] as $jscssfile) {
		if (file_exists(ROOT_DIR."/".$jscssfile)) {
			$tpl->result['main'] = str_ireplace($jscssfile, $jscssfile."?v=0.". filemtime(ROOT_DIR."/".$jscssfile), $tpl->result['main']);
		}
	}
}

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

Для установки на DLE 13+ можно просто установить плагин, без внесения правок в файлы движка:
obnovlenie-css-i-js-bez-ochistki-kesha.zip [881 b] (cкачиваний: 120)


ВНИМАНИЕ! Данный хак не работает с dle-asset, думаю не нужно объяснять почему… :)
12-06-2021, 16:31: Обновил плагин и инструкцию по установке хака
Комментарии:
{login}

Твой комментарий..

  1. Михаил 2 июня 2022 20:38

    Что-то на 15,1 не работает данная штуковина

    1. byroot Администраторы 2 июня 2022 21:09
      После установки плагина нужно включить действие в плагине, по умолчанию оно выключено после установки.
      1. Михаил 3 июня 2022 13:39
        Все включено, но версии так и не прописываются после изменения файлов.
        1. byroot Администраторы 3 июня 2022 14:30
          как файлы выводятся в шаблоне? пример можно? не dle asset случаем или min встроенный в ДЛЕ не используется при выводе их?

          сейчас на чистой 15.1 поставлю и проверю

          как вариант попробовать [code]### CSS/JS ###
          preg_match_all("#<(link|script).+?(href|src)=('|\")(".$config['http_home_url']."|/)(.*?(\.css|\.js))\\3.*?>#i", $tpl->result['main'], $jscssarr);
          if(!empty($jscssarr[5])) {
          foreach ($jscssarr[5] as $jscssfile) {
          if (file_exists(ROOT_DIR."/".$jscssfile)) {
          $tpl->result['main'] = str_ireplace($jscssfile, $jscssfile."?v=0.". filemtime(ROOT_DIR."/".$jscssfile), $tpl->result['main']);
          }
          }
          }[/code]
          1. Михаил 3 июня 2022 14:47
            https://prnt.sc/F4Gint0eE_Ur
            dle asset - не ставил
            min встроенный в ДЛЕ - это я так понимаю сжатие файлов, если да то включено
            1. byroot Администраторы 3 июня 2022 15:26
              выруби и делай подключение файлов без min/index! всё должно работать.
              1. Михаил 6 июня 2022 15:52
                Через плагин почему-то не заработало, вставил напрямую.
                Но появилось тоже задвоение /styles.css?v=0.1654502599?v=0.1654502599
                как это побороть?
                1. byroot Администраторы 6 июня 2022 16:42
                  Значит вы что то не так делаете! Вы представляете всю суть и нужность данного плагина? Пока вы с ним мучаетесь - давно бы уже и без него настроили все стили и скрипты с ручной чисткой или же с ручным добавлением окончаний к изменяемым js и css файлам в main.tpl.

                  Если нужно помощь в настройке - пишите https://t.me/byroot_ru - помогу, но не безвозмездно!
  2. Palec 3 апреля 2021 04:57
    Если подключен css 2х один раз с preload а второй без... то дублируется версия:

    <link rel="preload" href="/templates/df/css/styles.css?v=0.1617396101?v=0.1617396101" as="style">

    <link href="/templates/df/css/styles.css?v=0.1617396101?v=0.1617396101" type="text/css" rel="stylesheet">

    Как то поправить можно ?
    1. byroot Администраторы 3 апреля 2021 08:09
      зачем один файл подключать вообще два раза? Это временная метка, и естественно что на файл она будет одинаковая, сколько бы раз файл не выводился - его время будет неизменно.
      1. Palec 3 апреля 2021 15:59
        Это делается для предзагрузки css стилей rel="preload"...
        https://developer.mozilla.org/ru/docs/Web/HTML/Preloading_content
        1. Palec 3 апреля 2021 16:15
          Дело не то что она одинакова... это понятно так и должно быть. Но у у файла в конце добавляется 2x ?v=0.1617396101 ?v=0.1617396101

          <link href="/templates/df/css/styles.css?v=0.1617396101?v=0.1617396101" type="text/css" rel="stylesheet">
        2. byroot Администраторы 3 апреля 2021 19:43
          Это я знаю. Но если rel="preload" нормально работает, то не нужно второй раз те же самые стили подключать. А если rel="preload" не работает, то две строки подключения одного и того же файлы стилей ни к чему хорошему не приведут, потому что браузер будет загружать для раза CSS файл.
Модули для создания киносайта и не только на базе DataLife Engine, и многое другое...
Просто блог Евгения Попова, он же - byroot © 2015-2025 | Карта сайта