diff --git a/CHANGELOG.md b/CHANGELOG.md index b8c8d44725c..ccb71947e33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Release Notes for Craft CMS 6 +## Unreleased + +- Fixed a bug where the legacy `yii\web\JqueryAsset` wasn’t resolving properly. ([#19264](https://github.com/craftcms/cms/pull/19264)) + ## 6.0.0-alpha.13 - 2026-07-16 - Updated logout routes to require CSRF-protected POST requests. ([#19252](https://github.com/craftcms/cms/pull/19252/changes/ff6f20717a48e7ede5fbbe47487e7bb8ef71da78)) diff --git a/yii2-adapter/legacy/helpers/App.php b/yii2-adapter/legacy/helpers/App.php index 56d56b46833..8c4dc2f8aab 100644 --- a/yii2-adapter/legacy/helpers/App.php +++ b/yii2-adapter/legacy/helpers/App.php @@ -48,8 +48,10 @@ use yii\mutex\FileMutex; use yii\mutex\MysqlMutex; use yii\mutex\PgsqlMutex; +use yii\web\JqueryAsset as YiiJqueryAsset; use yii\web\JsonParser; use function CraftCms\Cms\backTraceAsString; +use function CraftCms\Cms\craftAsset; use function CraftCms\Cms\maxPowerCaptain; use function CraftCms\Cms\normalizeValue; use function CraftCms\Cms\normalizeVersion; @@ -604,6 +606,14 @@ public static function assetManagerConfig(): array 'fileMode' => $generalConfig->defaultFileMode, 'dirMode' => $generalConfig->defaultDirMode, 'appendTimestamp' => true, + 'bundles' => [ + YiiJqueryAsset::class => [ + 'sourcePath' => null, + 'js' => [ + craftAsset('legacy/jquery/dist/jquery.js'), + ], + ], + ], ]; } diff --git a/yii2-adapter/tests-laravel/View/CpAssetOrderTest.php b/yii2-adapter/tests-laravel/View/CpAssetOrderTest.php index 822bca7616b..cd04e3e37e3 100644 --- a/yii2-adapter/tests-laravel/View/CpAssetOrderTest.php +++ b/yii2-adapter/tests-laravel/View/CpAssetOrderTest.php @@ -7,6 +7,7 @@ use CraftCms\Cms\View\Enums\Position; use CraftCms\Cms\View\HtmlStack as HtmlStackService; use yii\web\AssetBundle; +use yii\web\JqueryAsset as YiiJqueryAsset; class CpAssetDependentAssetBundle extends AssetBundle { @@ -21,6 +22,19 @@ class CpAssetDependentAssetBundle extends AssetBundle ]; } +class YiiJqueryDependentAssetBundle extends AssetBundle +{ + public $baseUrl = 'https://example.test/assets'; + + public $depends = [ + YiiJqueryAsset::class, + ]; + + public $js = [ + 'depends-on-yii-jquery.js', + ]; +} + beforeEach(function() { HtmlStack::clear(); @@ -42,6 +56,20 @@ class CpAssetDependentAssetBundle extends AssetBundle ->and(strpos($html, 'legacy/jquery/dist/jquery.js'))->toBeLessThan(strpos($html, 'https://example.test/assets/dependent.js')); }); +it('resolves Yii jQuery asset bundles to the internal jQuery asset', function() { + $view = Craft::$app->getView(); + + $view->registerAssetBundle(YiiJqueryDependentAssetBundle::class); + + $html = $view->placeholderHtml()['bodyEndHtml']; + + expect($html) + ->toContain('legacy/jquery/dist/jquery.js') + ->and($html)->toContain('https://example.test/assets/depends-on-yii-jquery.js') + ->and(strpos($html, 'legacy/jquery/dist/jquery.js'))->toBeLessThan(strpos($html, 'https://example.test/assets/depends-on-yii-jquery.js')) + ->and($html)->not->toContain('cpresources'); +}); + it('uses the current scoped HtmlStack after scoped instances are flushed', function() { $view = Craft::$app->getView();