0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 834 Просмотров
*

rsn

  • Захожу иногда
  • 274
  • 14 / 2
Версии CSS и JS файлов
« : 07.08.2018, 08:09:50 »
Привет, коллеги!
В последних версиях Joomla появилась такая штука как автоматический контроль версий CSS и JS файлов и обновление путей до них.

В шаблонах это выглядит так:
Код
JHtml::_('stylesheet', 'main.css', array('version' => 'auto', 'relative' => true));
'version' => 'auto'

В HTML коде страницы:
Код
<link href="/templates/mkelektro/css/main.css?dada6753446d773121b16e74c4633248" rel="stylesheet" />
Параметр ?dada6753446d773121b16e74c4633248
Соответственно, параметр время от времени обновляется.

Это очень круто. Но:
Кто знает, как это работает?
Когда обновляются пути? После какого действия или события?
Предлагаю это немного обсудить  ^-^

Поискал на оф. сайте, не нашёл.
Поделитесь, пожалуйста, если кто знает.
« Последнее редактирование: 07.08.2018, 08:33:26 от rsn »
Есть одна хорошая компания, с которой приятно иметь дело )
*

dmitry_stas

  • Легенда
  • 13121
  • 1229 / 8
Re: Версии CSS и JS файлов
« Ответ #1 : 07.08.2018, 09:59:42 »
по факту это актуально только для файлов ядра Joomla. параметр этот - это по сути просто версия Joomla.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

draff

  • Живу я здесь
  • 4752
  • 324 / 7
  • Ищу работу
Re: Версии CSS и JS файлов
« Ответ #2 : 07.08.2018, 10:47:28 »
del
 
« Последнее редактирование: 07.08.2018, 11:56:45 от draff »
*

rsn

  • Захожу иногда
  • 274
  • 14 / 2
Re: Версии CSS и JS файлов
« Ответ #3 : 07.08.2018, 12:28:34 »
по факту это актуально только для файлов ядра Joomla. параметр этот - это по сути просто версия Joomla.
Спасибо за ответ.
Можно уточнить: почему Вы считаете именно так, что событием для обновления параметра служит обновление Joomla?

Мне показалось, что параметр обновляется чаще, чем обновление Joomla. Хотя строго не следил, могу и ошибаться.

И кстати, это не менее актуально для файлов шаблона. Что я, собственно, и использую.
Есть одна хорошая компания, с которой приятно иметь дело )
*

dmitry_stas

  • Легенда
  • 13121
  • 1229 / 8
Re: Версии CSS и JS файлов
« Ответ #4 : 07.08.2018, 12:46:34 »
я не сказал, что событием для обновления параметра служит обновление Joomla. я сказал что по сути этот параметр - это версия Joomla :) а параметр обновляется гораздо чаще, например после установки расширений. а при включенном дебаге - вообще каждый раз при загрузке страницы. но вопрос в том, что это никак не влияет на сторонние расширения. ну вернее влияет, только толку что вы например установили какой-нибудь модуль, хеш версии поменялся, а файлы CSS например шаблона даже не думали меняться.  а тем не менее они будут перезагружены. разве это правильно? и наоборот - вы по фтп поменяли css шаблона, хеш версии при этом само собой не менялся. итого браузер грузит файл из кеша. короче, имхо идея нормальная, а реализация хромает.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

kern.USR

  • Давно я тут
  • 825
  • 66 / 1
Re: Версии CSS и JS файлов
« Ответ #5 : 07.08.2018, 13:13:34 »
я не сказал, что событием для обновления параметра служит обновление Joomla. я сказал что по сути этот параметр - это версия Joomla :) а параметр обновляется гораздо чаще, например после установки расширений. а при включенном дебаге - вообще каждый раз при загрузке страницы. но вопрос в том, что это никак не влияет на сторонние расширения. ну вернее влияет, только толку что вы например установили какой-нибудь модуль, хеш версии поменялся, а файлы CSS например шаблона даже не думали меняться.  а тем не менее они будут перезагружены. разве это правильно? и наоборот - вы по ftp поменяли CSS шаблона, хеш версии при этом само собой не менялся. итого браузер грузит файл из кеша. короче, имхо идея нормальная, а реализация хромает.
Кстати, в более ранних версиях был такой метод getMd5Version. Сейчас он depricated, т.к. создаёт большую нагрузку, при каждой загрузке сайта.
Нынешний метод getMediaVersion не создаёт такой нагрузки, но не даёт правдивости хэшей, но если использовать встроенный кэш Joomla - проблема, как бы, сама себя ликвидирует. Т.к. хэш медиаверсии кэшируется и любое изменение в стилях должно приводить к сбросу кэша, а значит и к генерации нового хэша. Как по мне - реализация неплохая, но ей мало кто пользуется. Да и на боевых проектах редко вносятся такие изменения, что хэши постоянно сбрасывать приходится
*

rsn

  • Захожу иногда
  • 274
  • 14 / 2
Re: Версии CSS и JS файлов
« Ответ #6 : 07.08.2018, 13:23:30 »
Теперь понятнее. Спасибо.
и наоборот - вы по ftp поменяли CSS шаблона, хеш версии при этом само собой не менялся. итого браузер грузит файл из кеша. короче, имхо идея нормальная, а реализация хромает.
Согласен.
Развить бы то того, чтобы хеш обновлялся при обновлении даты редактирования css/js файла, вот это была бы вещь.
Возможно, это будет реализовано позже.

Да и на боевых проектах редко вносятся такие изменения, что хэши постоянно сбрасывать приходится
По-моему, как раз на "боевых" проектах, это и актуально.
Да, не очень часто. Но вручную обновлять версию, чтобы у старых пользователей обновилось, тоже не очень приятно на постоянной основе.
Есть одна хорошая компания, с которой приятно иметь дело )
*

dmitry_stas

  • Легенда
  • 13121
  • 1229 / 8
Re: Версии CSS и JS файлов
« Ответ #7 : 07.08.2018, 13:27:20 »
Развить бы то того, чтобы хеш обновлялся при обновлении даты редактирования css/js файла, вот это была бы вещь.
да, так и нужно
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

rsn

  • Захожу иногда
  • 274
  • 14 / 2
Re: Версии CSS и JS файлов
« Ответ #8 : 09.08.2018, 07:45:16 »
Код
JHtml::_('stylesheet', 'main.css', array('version' => 'auto', 'relative' => true));
Тут вместо auto можно указать просто число, номер версии.

Соответственно, можно этот номер править руками или подставить переменную.

Разумеется, тоже самое (подставить переменную) можно сделать в случае прямого указания ссылки на CSS в виде строки:
Код
<link rel="stylesheet" href="/templates/mkelektro/css/bottom.css?<?php echo $peremennaya; ?>">

Как думаете, что если сделать небольшой скрипт, который выполнять кроном каждые 5-10 минут, чтобы он записывал в дополнительный небольшой файл (в шаблоне) номер версии (если изменилась дата обновления файла css), и подцеплять этот файл в шаблон для использования номера версии?

Интересны мнения на этот счёт
Есть одна хорошая компания, с которой приятно иметь дело )
*

dm-krv

  • Давно я тут
  • 984
  • 22 / 0
Re: Версии CSS и JS файлов
« Ответ #9 : 09.08.2018, 08:18:10 »
Народ, а нельзя как-то вручную обновить вот этот рандомный хвост в один клик? Было бы удобно.
*

kern.USR

  • Давно я тут
  • 825
  • 66 / 1
Re: Версии CSS и JS файлов
« Ответ #10 : 09.08.2018, 09:06:51 »
Включить режим отладки, зайти на фронтенд, выключить режим отладки
*

Театрал

  • Захожу иногда
  • 184
  • 6 / 0
Re: Версии CSS и JS файлов
« Ответ #11 : 12.01.2020, 02:03:01 »
Тоже вот хотелось бы, чтоб при малейшем изменении файла менялась и "его версия"... не включая режим отладки!

====

В общем вот, что смог придумать:

Код

function fileVersion ($fileName) {
    $folder = end(explode(".", $fileName)); // имя папки берём из расширения файла, т.к. стили и скрипты лежат в папках CSS и JS
    $realpath = realpath(dirname(__FILE__) . '/' . $folder . '/' . $fileName);
    return  'ver=' . date("Ymdhi", filemtime($realpath));
}

JHtml::_('stylesheet', 'template.css', array('version' => fileVersion ('template.css'), 'relative' => true));

JHtml::_('script', 'template.js', array('version' => fileVersion ('template.js'), 'relative' => true));


Проверок на существование файла нет, т.к. если JHtml::_('stylesheet', 'template.css' не сработает (файл отсутствует), то и функция не будет вызвана.

В PHP плаваю. На сколько это небезопасно, ресурсоёмко или вообще можно как-то проще и короче?
« Последнее редактирование: 12.01.2020, 05:54:33 от Театрал »
*

sivers

  • Завсегдатай
  • 1237
  • 158 / 0
Re: Версии CSS и JS файлов
« Ответ #12 : 12.01.2020, 10:12:41 »
Так а чем плох
Код
JHtml::_('script', 'template.js', array('version' => 'auto'));
или
Код
JDocument::addScriptVersion('template.js');
?
На связи в телеге @sivers
*

ProtectYourSite

  • Живу я здесь
  • 2057
  • 110 / 4
  • Безопасность вебсайтов
Re: Версии CSS и JS файлов
« Ответ #13 : 12.01.2020, 10:51:35 »
Там версия насколько понимаю зависит от версии Joomla, если вручную вносить правки, то версия не изменится.
*

sivers

  • Завсегдатай
  • 1237
  • 158 / 0
Re: Версии CSS и JS файлов
« Ответ #14 : 12.01.2020, 11:05:24 »
Там версия насколько понимаю зависит от версии Joomla, если вручную вносить правки, то версия не изменится.
Надо же - действительно так. Проверил сейчас - версия не поменялась.
На связи в телеге @sivers
*

rsn

  • Захожу иногда
  • 274
  • 14 / 2
Re: Версии CSS и JS файлов
« Ответ #15 : 13.01.2020, 09:21:21 »
Я пока остановился на этом:

Разово:
В начале index.php шаблона после defined('_JEXEC') or die;
Код
$version = 221
;
Ниже, там, где подключаю CSS и JS - дописываю версию.
Так:
Код
JHtml::_('stylesheet', 'main.css', array('version' => $version, 'relative' => true));
И так:
Код
<link rel="stylesheet" href="<?php echo '/templates/'.$this->template.'/css/bottom.css?'.$version; ?>">
<script src="<?php echo '/templates/'.$this->template.'/js/custom.js?'.$version; ?>"></script>

В дальнейшем, если обновил CSS или JS и хочу, чтобы он точно обновился у посетителей, - правлю в начале index.php шаблона номер версии на следующий.
Это не кнопка в один клик, но тоже очень простое и быстрое действие.

Всё работает ОК. Никакой доп. нагрузки и задержки на проверку модификации файла.

Можно, конечно, это автоматизировать. Но пока другие задачи более приоритетны. Это и так устраивает.
Есть одна хорошая компания, с которой приятно иметь дело )
*

rsn

  • Захожу иногда
  • 274
  • 14 / 2
Re: Версии CSS и JS файлов
« Ответ #16 : 13.01.2020, 09:25:24 »
Кстати, сейчас подумал:
Можно номер версии брать из версии расширения (шаблона).
А эту версию шаблона, в свою очередь, проверять и обновлять, скажем, небольшим скриптом, запускаемым кроном хоть каждую минуту. Если изменился хотя бы 1 файл из шаблона - обновить последние цифры в версии шаблона.
Есть одна хорошая компания, с которой приятно иметь дело )
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Плагин для транслитерации имен загружаемых файлов

Автор KSS

Ответов: 3
Просмотров: 689
Последний ответ 15.05.2020, 13:12:40
от jem777
Модуль входа в мобильной версии сайта

Автор bigbelka

Ответов: 3
Просмотров: 195
Последний ответ 22.04.2020, 09:28:29
от bigbelka
Старая и новая версии сайта

Автор help-tend

Ответов: 12
Просмотров: 287
Последний ответ 18.04.2020, 21:20:57
от SeBun
Загрузка моб.версии сайта на десктопе посетителя по умолчанию?

Автор Cassini

Ответов: 3
Просмотров: 259
Последний ответ 12.04.2020, 00:38:33
от Cassini
Заменить строчку кода для версии 3.6

Автор Шмайсер

Ответов: 2
Просмотров: 133
Последний ответ 08.03.2020, 11:15:23
от Шмайсер