2015-11-19 4 views
1

Я хочу создать пользовательский виджет в yii2 с его css и js-файлами. Внутри «компонентов» я создал папку «myWidget» и внутри нее: - myWidget.php, которая расширяет yii \ base \ Widget. - myWidgetAsset.php, который расширяет yii \ web \ AssetBundle. - просмотр папки, содержащей файл index.php. - папка с ресурсами, содержащая файлы main.css и main.js.Как зарегистрировать активы виджета в Yii2?

Вот коды: 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> 

вместо того что-то вроде, например, бутстрап:

<link href="/becyt/assets/67099f30/css/bootstrap.css" rel="stylesheet"> 

Что я делаю неправильно? Что мне не хватает? Заранее спасибо.

+0

Похоже, вы никогда не регистрировать свой AssetBundle. Я думаю, что вам не хватает, это 'myWidgetAsset :: register ($ this-> view);' перед вызовом 'return $ this-> render ('index');' Однако я застрял в этой же проблеме , где мои js и css-активы вообще не регистрируются, поэтому, если кто-нибудь еще сможет прослушивать, я бы тоже это оценил. –

ответ

0

Чтобы опубликовать файлы активов, вы должны установить sourcePath вместо basePath и baseUrl, например. :

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

Читать в официальном руководстве here:

источник активы: файлы активов находятся вместе с исходной PHP кода, который не может быть непосредственно доступен через Интернет. Чтобы использовать исходные активы на странице, их необходимо скопировать в веб-каталог и превратить в так называемые опубликованные активы.

И, конечно же, не забудьте зарегистрировать этот комплект активов в своем виджетах run().

+0

Это сработало! Большое спасибо soju! – Teleuko

0

Вы также можете зарегистрировать виджеты активов как

<?php 
use yii\helpers\Html; 
use yii\helpers\Url; 
use yii\widgets\ActiveForm; 
\marqu3s\summernote\SummernoteAsset::register($this); 
1

Вы можете зарегистрировать AssetBundle в init() функции виджета, как это:

public function init() { 
    MyAssetBundle::register($this->getView()); 
    parent::init(); 
} 
Смежные вопросы