web-dev-qa-db-ja.com

Joomla内でファイルの変更時に更新するようにcssとjsの自動バージョン管理を強制する方法!テンプレート?

テンプレート内のcssとjsのバージョンがファイルの変更時に自動的に更新されるようにしたいと思います。 JHtmlを自動バージョン管理で試しましたが、望ましい結果は得られませんでした。

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

ファイルの変更時にバージョンの自動更新は可能ですか?そうでない場合、手動でバージョンを強制的に更新する方法はありますか?

2
Pieter

古い非推奨の方法は、_MD5SUM_ファイルをアセットフォルダに配置し、アセットファイルが変更されるたびにそれを更新することです。ファイルを作成したら、バージョンなしまたはバージョンとして_md5sum_を使用してアセットを追加します。

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

このメソッドはJoomla 4.0ではサポートされません。

テンプレートファイルは最終的なものなので(オーバーライドできません)、変更時間をバージョンとして使用するのが簡単な方法です。

_$version = filemtime(JPATH_THEMES . '/' . $this->template . '/css/template.css');
JHtml::_('stylesheet', 'template.css', array('version' => $version, 'relative' => true));
_

他のすべてのファイルについては、変更できるため、変更時間のチェックはより複雑です。 JHtml::stylesheet()pathOnlyオプションを設定すると、ファイルへの相対URLを取得できます。次に、URLからルートパスを削除し、実際のルートパスを追加します。

_// 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));
_
3
Sharky

CSSファイルの変更方法によって異なります。上記のJHTML行は機能します。強制しない限り、バージョンは変更されません。

テンプレートのindex.phpファイルの先頭に、次の行も追加する必要があります。

$this->setMediaVersion('x.y.z');

ここで、「x.y.z」はテンプレートの新しいバージョン文字列です。次に、その文字列は、スタイルシートをロードするリンクに使用されます。

これは、メディアファイルを変更するたびに行う必要がある手動の変更です。これは手動のプロセスですが、簡単な変更であり、テンプレートを更新したときにキャッシュを強制的に更新できます。

メディアバージョンはjoomlaのVersionオブジェクトの一部であり、実際にはこの用途を意図したものではありませんが、これは目的を達成する最も簡単な方法です。そこにはis別の方法、JHTML :: registerを使用しますが、Joomlaプラグインを作成する意欲がわからないので、単純な方法でこだわりました。

2
Arlen