如何从yii2中的特定视图中删除资产

时间:2016-02-22 05:54:27

标签: yii2 yii2-advanced-app

我有一个名为reports的视图,我想显示一个引导下拉列表。

<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>

但仍然在视图中看到它。我该怎么办?

1 个答案:

答案 0 :(得分:2)

问题分析

如果一切都被正确指定,这是不可能的。 Yii2会检测到您正在两次注册同一资产,并且只包含一次。在你的例子中,第二个(不是缩小的)似乎以正确的方式注册,而第一个从主题文件夹注册。

看起来您正在使用扩展程序或某个主题,它使用自己的资产文件(以及自己的引导程序文件!)从非资产文件夹(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文件,除了重复的文件。现在这会覆盖此捆绑包的asset-config,因此应解决您的问题,而不会从视图中排除某些内容(这将违背资产管理的基本概念)。

查找失败的资产包应该很容易。只需在您的主题中查找一个类yii\web\AssetBundle并在其bootstrap.min.js - 数组中包含文件$js