如何在Yii2中注册窗口小部件资产?

时间:2015-11-19 16:42:27

标签: css widget yii2 assets

我想在yii2中使用css和js文件创建自定义小部件。内部'组件'文件夹我已经创建了一个“myWidget”文件夹。文件夹及其内部: - 扩展yii \ base \ Widget的myWidget.php。 - myWidgetAsset.php,它扩展了yii \ web \ AssetBundle。 - 包含index.php文件的views文件夹。 - 包含main.css和main.js文件的assets文件夹。

以下是代码:myWidget.php

namespace app\components\myWidget;

use app\components\tablaFoS\tablaFoSAsset;
use app\models\DisciplinesGrandesAreas;
use yii\base\Widget;

class myWidget extends Widget {

   public function run() {
    parent::run();

    return $this->render('index');
   }
}

myWidgetAsset.php

namespace app\components\myWidget;

use yii\web\AssetBundle;

class myWidgetAsset extends AssetBundle {

    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = ['assets/main.css'];
    public $js = ['assets/main.js'];
    public $depends = [
    ];
}

当我看到生成的代码时,我得到了:

<link rel="stylesheet" href="/assets/main.css"></link>
<script src="/assets/main.js"></script>

而不是像bootsstrap:

这样的东西
<link href="/becyt/assets/67099f30/css/bootstrap.css" rel="stylesheet">

我做错了什么?我错过了什么?提前谢谢。

3 个答案:

答案 0 :(得分:4)

您可以在小部件的init()功能中注册您的AssetBundle,如下所示:

public function init() {
    MyAssetBundle::register( $this->getView() );
    parent::init();
}

答案 1 :(得分:3)

要发布资产文件,您应该设置sourcePath而不是basePathbaseUrl,例如:

class myWidgetAsset extends AssetBundle {
    public $sourcePath = '@app/components/myWidget/assets';
    public $css = ['main.css'];
    public $js = ['main.js'];
}

在官方指南here中阅读更多内容:

  

源资产:资产文件与PHP源一起定位   无法通过Web直接访问的代码。为了使用源码   在页面中的资源,它们应该被复制到Web目录并转向   进入所谓的公布资产。

当然,不要忘记在您的小部件run()方法中注册此资产包。

答案 2 :(得分:1)

您还可以注册像

这样的小部件资产
<?php
use yii\helpers\Html;
use yii\helpers\Url;
use yii\widgets\ActiveForm;
\marqu3s\summernote\SummernoteAsset::register($this);
相关问题