PHPのいくつかの行を使用して、Joomlaによって読み込まれたネイティブJHtml::_('jquery.framework')
をオーバーライドすることは可能ですか?
テンプレートのこの行を置き換えることができることを理解しています。しかし、私はテンプレートビルダーを使用しているので、次の更新の後に戻ってきます。そうは言っても、変更を書き込む前にテンプレートにphpを追加できます。では、jQueryフレームワークのロードを無効にするために使用できるphpの行がある場合はどうなりますか?それは素晴らしいことです。
この質問の理由は、私がLightHouseテストでほぼ完璧なスコアを持っているためです。しかし、使用されたjQueryライブラリに既知の脆弱性があることを警告します。
テンプレートフォルダーに新しいバージョンのjQueryが用意されており、代わりに読み込むことができます。または、Joomlaは本当に1.xバージョンを必要としますか?
どんな洞察も最も高く評価されます。ありがとう!
または、Joomlaは本当に1.xバージョンを必要としますか?
Joomla自体は、新しいjQueryバージョンでほぼ正常に動作する可能性があります。このような古いバージョンに同梱されている理由は、サードパーティの拡張機能との互換性です。
では、jQueryフレームワークのロードを無効にするために使用できるphpの行がある場合はどうなりますか?
JQueryのロードを完全に無効にするには、JHtml::_('jquery.framework')
をオーバーライドするプラグインを作成するか、最終的にjQueryをロードするレイアウトのオーバーライドを作成する必要があります。プラグインを使用して、カスタムバージョンをロードすることもできます。
defined('_JEXEC') or exit;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Plugin\CMSPlugin;
class PlgSystemExample extends CMSPlugin
{
// Cache to allow running code only once.
protected static $loaded = false;
public function onAfterInitialise()
{
// Check that the method hasn't been used yet.
if (!HTMLHelper::isRegistered('jquery.framework'))
{
// Register our custom method.
HTMLHelper::register('jquery.framework', [__CLASS__, 'framework']);
}
}
public static function framework($noConflict = true, $debug = null, $migrate = true)
{
// Load only once.
if (!static::$loaded)
{
return;
}
// Load the main library
HTMLHelper::_('script', 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js');
// Check if we are loading in noConflict.
if ($noConflict)
{
Factory::getApplication()->getDocument()->addScriptDeclaration('jQuery.noConflict();');
}
// Check if we are loading Migrate.
if ($migrate)
{
HTMLHelper::_('script', 'https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.0.1/jquery-migrate.min.js');
}
// Enable cache flag.
static::$loaded = true;
}
}
または、jQueryスクリプトをテンプレートレベルでオーバーライドする場合は、カスタムスクリプトをtemplates/your_template/js/jui/jquery.min.js
。