Yii2 NavBar 强制加载额外的 Bootstrap
Yii2 NavBar forcing load of extra Bootstrap
我正在尝试将 Start Bootstrap 的 Heroic Features 模板改编为 Yii2。
heroic-features.css
包括 Bootstrap & 我喜欢尽可能使用 CDN,所以我覆盖了 YiiAsset
、JqueryAsset
和 BootstrapAsset
.
一切看起来都很好,直到我包含 NavBar。
在frontend/views/layouts/main.php
我拥有一切bootstrap5
...
use common\widgets\Alert;
use yii\bootstrap5\Breadcrumbs;
use yii\bootstrap5\Html;
use yii\bootstrap5\Nav;
use yii\bootstrap5\NavBar;
p2m\demo\assets\ThingsDemoAsset::register($this);
p2m\assets\BootstrapIconsAsset::register($this);
提供我想要的...
<link href="/assets/ffcb6986/css/heroic-features.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" integrity="sha384-tKLJeE1ALTUwtXlaGjJYM3sejfssWdAaWR2s97axw4xkiAdMzQjtOjgcyw0Y50KU" crossorigin="anonymous">
...
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
<script src="/assets/b94ae250/yii.js"></script>
<script src="/assets/ffcb6986/js/heroic-features.js"></script></body>
只要我添加任何东西 NavBar
,甚至完全是空的,到 frontend/views/layouts/main.php
...
NavBar::begin();
NavBar::end();
我得到这个输出...
<link href="/assets/ffcb6986/css/heroic-features.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" integrity="sha384-tKLJeE1ALTUwtXlaGjJYM3sejfssWdAaWR2s97axw4xkiAdMzQjtOjgcyw0Y50KU" crossorigin="anonymous">
<link href="/assets/51c6396f/css/bootstrap.css" rel="stylesheet"> <!-- << this! -->
...
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
<script src="/assets/b94ae250/yii.js"></script>
<script src="/assets/ffcb6986/js/heroic-features.js"></script>
<script src="/assets/51c6396f/js/bootstrap.bundle.js"></script></body> <!-- << this! -->
<!-- << this! -->
插入以突出显示额外的输出。
是什么导致额外的 Bootstrap 加载?
不要使用 bootstrap 导航栏,它会在内部注册 bootstrap 插件资产。您还需要自定义导航栏。
public function run()
{
$tag = ArrayHelper::remove($this->containerOptions, 'tag', 'div');
echo Html::endTag($tag);
if ($this->renderInnerContainer) {
echo Html::endTag('div');
}
$tag = ArrayHelper::remove($this->options, 'tag', 'nav');
echo Html::endTag($tag);
BootstrapPluginAsset::register($this->getView());
}
我正在尝试将 Start Bootstrap 的 Heroic Features 模板改编为 Yii2。
heroic-features.css
包括 Bootstrap & 我喜欢尽可能使用 CDN,所以我覆盖了 YiiAsset
、JqueryAsset
和 BootstrapAsset
.
一切看起来都很好,直到我包含 NavBar。
在frontend/views/layouts/main.php
我拥有一切bootstrap5
...
use common\widgets\Alert;
use yii\bootstrap5\Breadcrumbs;
use yii\bootstrap5\Html;
use yii\bootstrap5\Nav;
use yii\bootstrap5\NavBar;
p2m\demo\assets\ThingsDemoAsset::register($this);
p2m\assets\BootstrapIconsAsset::register($this);
提供我想要的...
<link href="/assets/ffcb6986/css/heroic-features.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" integrity="sha384-tKLJeE1ALTUwtXlaGjJYM3sejfssWdAaWR2s97axw4xkiAdMzQjtOjgcyw0Y50KU" crossorigin="anonymous">
...
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
<script src="/assets/b94ae250/yii.js"></script>
<script src="/assets/ffcb6986/js/heroic-features.js"></script></body>
只要我添加任何东西 NavBar
,甚至完全是空的,到 frontend/views/layouts/main.php
...
NavBar::begin();
NavBar::end();
我得到这个输出...
<link href="/assets/ffcb6986/css/heroic-features.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" integrity="sha384-tKLJeE1ALTUwtXlaGjJYM3sejfssWdAaWR2s97axw4xkiAdMzQjtOjgcyw0Y50KU" crossorigin="anonymous">
<link href="/assets/51c6396f/css/bootstrap.css" rel="stylesheet"> <!-- << this! -->
...
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
<script src="/assets/b94ae250/yii.js"></script>
<script src="/assets/ffcb6986/js/heroic-features.js"></script>
<script src="/assets/51c6396f/js/bootstrap.bundle.js"></script></body> <!-- << this! -->
<!-- << this! -->
插入以突出显示额外的输出。
是什么导致额外的 Bootstrap 加载?
不要使用 bootstrap 导航栏,它会在内部注册 bootstrap 插件资产。您还需要自定义导航栏。
public function run()
{
$tag = ArrayHelper::remove($this->containerOptions, 'tag', 'div');
echo Html::endTag($tag);
if ($this->renderInnerContainer) {
echo Html::endTag('div');
}
$tag = ArrayHelper::remove($this->options, 'tag', 'nav');
echo Html::endTag($tag);
BootstrapPluginAsset::register($this->getView());
}