如何从 yii2 中的特定视图中删除资产
How to remove an asset from a particular view in yii2
我有一个名为 reports
的视图,我想在其中显示 bootstrap 下拉菜单。
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Dropdown Example
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">HTML</a></li>
<li><a href="#">CSS</a></li>
<li><a href="#">JavaScript</a></li>
</ul>
</div>
仅在此视图中不起作用。我发现在这个视图中有多个 bootstrap js 文件。
<script src="/~folder/project/web/theme/bootstrap/js/bootstrap.min.js"></script>
<script src="/~folder/project/web/assets/db70fa5c/js/bootstrap.js"></script>
我怎样才能删除其中的一个?
我尝试创建一个新的 RegisterAsset.php 文件,其中我遗漏了脚本
<script src="/~folder/project/web/theme/bootstrap/js/bootstrap.min.js"></script>
但它仍然出现在视图中。我该怎么办?
问题分析
如果一切都被正确指定,这是不可能的。 Yii2 会检测到您两次注册相同的资产并且只包含一次。在您的示例中,第二个(不是缩小的)似乎以正确的方式注册,而第一个是从主题文件夹中注册的。
看起来您正在使用一个扩展或一些主题,它使用自己的资产文件(和它自己的 bootstrap 文件!)从非资产文件夹注册 (web/theme/...
) .不符合规范... ;)
我们来解决吧!
找出哪个资产正在注册您的第二个 bootstrap 文件(主题文件夹中的那个)。现在您可以通过全局配置文件简单地覆盖此资产的配置。为此,请先阅读 docs,然后在 config/web.php
中执行以下操作:
'assetManager'=>[
//...
'bundles'=>[
'namespace\to\your\failing\asset\Bundle'=>[
//add all css-files of the bundle except the duplicate one here
'js'=>['js/fileA.js', 'js/fileB.js'],
],
],
//...
],
现在您指定包的 js 文件,除了重复的那个。这现在确实会覆盖此捆绑包的资产配置,因此应该可以解决您的问题而不排除视图中的某些内容(这将违反资产管理的基本思想)。
找到失败的资产包应该很容易。只需在您的主题中查找扩展 yii\web\AssetBundle
并在其 $js
数组中包含文件 bootstrap.min.js
的 class。
我有一个名为 reports
的视图,我想在其中显示 bootstrap 下拉菜单。
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Dropdown Example
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">HTML</a></li>
<li><a href="#">CSS</a></li>
<li><a href="#">JavaScript</a></li>
</ul>
</div>
仅在此视图中不起作用。我发现在这个视图中有多个 bootstrap js 文件。
<script src="/~folder/project/web/theme/bootstrap/js/bootstrap.min.js"></script>
<script src="/~folder/project/web/assets/db70fa5c/js/bootstrap.js"></script>
我怎样才能删除其中的一个?
我尝试创建一个新的 RegisterAsset.php 文件,其中我遗漏了脚本
<script src="/~folder/project/web/theme/bootstrap/js/bootstrap.min.js"></script>
但它仍然出现在视图中。我该怎么办?
问题分析
如果一切都被正确指定,这是不可能的。 Yii2 会检测到您两次注册相同的资产并且只包含一次。在您的示例中,第二个(不是缩小的)似乎以正确的方式注册,而第一个是从主题文件夹中注册的。
看起来您正在使用一个扩展或一些主题,它使用自己的资产文件(和它自己的 bootstrap 文件!)从非资产文件夹注册 (web/theme/...
) .不符合规范... ;)
我们来解决吧!
找出哪个资产正在注册您的第二个 bootstrap 文件(主题文件夹中的那个)。现在您可以通过全局配置文件简单地覆盖此资产的配置。为此,请先阅读 docs,然后在 config/web.php
中执行以下操作:
'assetManager'=>[
//...
'bundles'=>[
'namespace\to\your\failing\asset\Bundle'=>[
//add all css-files of the bundle except the duplicate one here
'js'=>['js/fileA.js', 'js/fileB.js'],
],
],
//...
],
现在您指定包的 js 文件,除了重复的那个。这现在确实会覆盖此捆绑包的资产配置,因此应该可以解决您的问题而不排除视图中的某些内容(这将违反资产管理的基本思想)。
找到失败的资产包应该很容易。只需在您的主题中查找扩展 yii\web\AssetBundle
并在其 $js
数组中包含文件 bootstrap.min.js
的 class。