The old and deprecated way is to place MD5SUM
file in the asset folder and have it updated whenever an asset file is modified. Once you create the file, add assets without version or with md5sum
as version:
JHtml::_('stylesheet', 'template.css', array('relative' => true));
JHtml::_('stylesheet', 'template2.css', array('version' => 'md5sum', 'relative' => true));
This method will not be supported in Joomla 4.0.
Since template files are final (not overridable), a simple way is to use their modification time as version:
$version = filemtime(JPATH_THEMES . '/' . $this->template . '/css/template.css');
JHtml::_('stylesheet', 'template.css', array('version' => $version, 'relative' => true));
For all others files checking modification time is more complex because they can be overridden. We can get a relative URL to file by setting pathOnly
option in JHtml::stylesheet()
. Then remove root path from URL and add real root path.
// Get Joomla web root path.
$root = JUri::root(true);
// Get relative URL to file.
$relative = JHtml::_('stylesheet', 'template.css', array('pathOnly' => true, 'relative' => true));
// Remove web root path if needed.
$relative = $root !== '' ? substr_replace($relative, '', 0, strlen($root)) : $relative;
// Prepend real root path.
$version = filemtime(JPATH_ROOT . $relative);
// Add the stylesheet with custom version.
JHtml::_('stylesheet', 'template.css', array('version' => $version, 'relative' => true));