【问题标题】:Yii 2 - Conditional Assets?Yii 2 - 条件资产?
【发布时间】:2015-11-23 14:00:53
【问题描述】:

我们希望加载以下内容:

   <!--[if !IE]>
        <link rel="stylesheet" type="text/css" href="/css/good-browsers.css" />
    <![endif]-->

如何设置捆绑资源,以有条件地加载某个 css 文件?

答案针对两种不同的资源。

return [
    // ...
    'components' => [
        'assetManager' => [
            'bundles' => [
                'yii\web\YiiAsset' => [
                    'jsOptions' => ['condition' => 'lt IE 7'],
                ],
                'yii\bootstrap\BootstrapAsset' => [
                    'jsOptions' => ['condition' => 'lt IE 7'],
                ],
            ],
        ],
    ],
];

然而,在这种情况下,它们都与:'yii\web\YiiAsset'有关。如何有条件地加载它们?

【问题讨论】:

  • How can I add conditions to yii2 depends in AppAsset class? 的可能重复项。也就是说,Yii2 不应该忽略你的布局——你确定你没有缓存和/或正在加载不同的布局吗?您是否检查了源代码以确保它正在输出?
  • 我没有阅读不同的布局。我现在已经多次“硬重置”缓存 - 但是,我想条件选项可以解决问题。谢谢。
  • 这不应该被关闭。我猜链接的答案没有回答这个问题。我会重新提出这个问题。
  • @h2ooooooo 请查看此问题更新。您的链接解决方案似乎不适用于这种情况。
  • 您是否多次包含 same 资产?为什么?也就是说,AssetBundle-&gt;jsOptionsyii2\web\AssetBundle 类的公共属性,因此您可以简单地在您的应用资产中设置它。应该没有理由使用该配置(而且当您将东西从实际发生的地方移开时,它只会让它看起来更加混乱)

标签: yii2


【解决方案1】:

您应该能够通过创建两个资产包而不是一个来做到这一点,然后在 IE 包上使用 $cssOptions 属性并让它依赖于您的通用包:

<?php

namespace frontend\assets;

use yii\web\AssetBundle;

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';

    public $baseUrl = '@web';

    public $css = [
        'css/site.css',
    ];

    public $js = [
        'js/site.js',
    ];

    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
        '\yii\web\JqueryAsset',
    ];
}

IE 包:

<?php

namespace frontend\assets;

use yii\web\AssetBundle;

class AppIeAsset extends AssetBundle
{
    public $basePath = '@webroot';

    public $baseUrl = '@web';

    public $css = [
        'css/site_ie.css',
    ];

    public $js = [
        'js/site_ie.js',
    ];

    public $cssOptions = [
        'condition' => 'IE',
    ];

    public $depends = [
        '\frontend\assets\AppAsset', // Depend on the regular app bundle
    ];
}

主布局:

<?php
/**
 * @var yii\web\View $this
 */

AppIeAsset::register($this);

?>

blablabla

编辑

我看到您正在尝试以相反的方式进行操作 - 它应该仍然相当简单,因为您所要做的就是更改 IE 资产的名称(以免引起混淆)并更改条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多