条件AppAssets

时间:2016-01-19 15:56:18

标签: php yii2

我有一个视图,我需要在我的标题中调用JQuery以及另一个JS库。对于所有其他页面,可以在文档末尾呈现它们。在Yii2中实现这一目标的最佳方法是什么?

目前我只是在我的AppAsset.php中执行此操作

public $js = [
  'https://code.highcharts.com/highcharts.js',
];
public $jsOptions = ['position' => \yii\web\View::POS_HEAD]; 

我已经考虑制作一个new Asset,但它似乎没有用,我不确定这是不是正确的方法。因为我不想在每个页面中首先渲染JS。

<?php

namespace app\assets;

use yii\web\AssetBundle;

class EarlyJavaScriptAsset extends AssetBundle
{
public $js = [
'https://code.highcharts.com/highcharts.js',
];
public $jsOptions = ['position' => \yii\web\View::POS_HEAD]; 

public $publishOptions = [
    'only' => [
        'report/report-1', // this is view folder location
    ]
];
}

1 个答案:

答案 0 :(得分:1)

如果您查看AssetBundle::register(),您会看到它使用View::registerAssetBundle()而没有第二个参数。但是第二个参数是你需要的东西:

  

@param integer | null $ position如果设置,则强制javascript文件的最小位置。   这将调整依赖资源的javascript文件位置或失败if   要求无法满足。如果为null,则资产捆绑位置   设置不会更改。有关详细信息,请参阅registerJsFile   javascript位置。

在您的视图中,您注册资产包的位置,请更改

EarlyJavaScriptAsset::register($this);

$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_HEAD);

$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_END);

在第二个视图中

PS:当然$this是您View的上下文。