我想在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">
我做错了什么?我错过了什么?提前谢谢。
答案 0 :(得分:4)
您可以在小部件的init()
功能中注册您的AssetBundle,如下所示:
public function init() {
MyAssetBundle::register( $this->getView() );
parent::init();
}
答案 1 :(得分:3)
要发布资产文件,您应该设置sourcePath
而不是basePath
和baseUrl
,例如:
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);