Динамические AssetBundle

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
edwardstock
Сообщения: 16
Зарегистрирован: 2013.04.08, 19:14
Откуда: Москва

Динамические AssetBundle

Сообщение edwardstock »

Всем привет! Работаю над одним расширением, встал остро вопрос динамической публикации ресурсов. В первом Yii можно было пройтись CAssetMangaer::publish() по файлам, и зная их пути и имена зарегистрировать. Во второй версии что-то непонятное намудрили. Переопределил класс AssetBundle, указал свойство AssetBundle::$sourcePath в @vendor/myext/myResPath/. В myResPath есть еще директории, имена которых известны.

Вопрос: как добавить в массивы AssetBundle::$css и AssetBundle::$js, а так же AssetBundle::$depends (пользовательские зависимости) новые пути к файлам

Может я что-то не понял, тыкните где глянуть.
Спасибо!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Динамические AssetBundle

Сообщение zelenin »

edwardstock писал(а):Переопределил класс AssetBundle
надо унаследоваться, а не переопределять.
edwardstock писал(а):указал свойство AssetBundle::$sourcePath в @vendor/myext/myResPath/. В myResPath есть еще директории, имена которых известны.
все что в $sourcePath скопируется в web/assets и будет доступно
edwardstock писал(а): Вопрос: как добавить в массивы AssetBundle::$css и AssetBundle::$js, а так же AssetBundle::$depends (пользовательские зависимости) новые пути к файлам

Код: Выделить всё

<?php

namespace common\assets;

use yii\web\AssetBundle;

class BootstrapPluginAsset extends AssetBundle
{
    public $sourcePath = '@common/assets/bootstrap';
    public $depends = [
        'yii\web\JqueryAsset',
        'yii\bootstrap\BootstrapAsset'
    ];

    public function init()
    {
        $this->js[] = YII_DEBUG
            ? 'js/bootstrap.js'
            : 'js/bootstrap.min.js';
        parent::init();
    }
}

Аватара пользователя
edwardstock
Сообщения: 16
Зарегистрирован: 2013.04.08, 19:14
Откуда: Москва

Re: Динамические AssetBundle

Сообщение edwardstock »

все что в $sourcePath скопируется в web/assets и будет доступно
не копируется, более того я не пойму механизма регистрации AssetBundle. Если он регистрируется непосредственно в леайуте, через AssetBundle::register(View $view), или например через унаследованный класс MyAssetBudnle::register(View $view), то если я убираю его из шаблона, тот же bootstrap и jquery все равно есть на странице. Если в конфиге компонента assetManager указываю свойство "class "на мой бандл MyAssetBundle::class, то появляется ошибка отсутствия метода MyAssetBundle::getBundle().

Класс выглядит примерно так:

Код: Выделить всё


use yii\web\AssetBundle;
class MyAssetBundle extends AssetBundle
{
    public $sourcePath = '@vendor/myExt/myResPath';

    public $depends = [];

    public function init() {
        $this->setDepends();
        parent::init();
    }

    private function setDepends() {
                //пользователь в конфиге расширения укажет зависимости
        if(isset(\Yii::$app->myExt) && \Yii::$app->myExt instanceof MyExtension){
            $this->depends = \Yii::$app->myExt->getDepends();
        }
    }

} 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Динамические AssetBundle

Сообщение zelenin »

edwardstock писал(а): MyAssetBudnle::register(View $view),
верно
edwardstock писал(а): то если я убираю его из шаблона, тот же bootstrap и jquery все равно есть на странице.
бутстрап много где в yii используется, в gridview например
edwardstock писал(а): Если в конфиге компонента assetManager указываю свойство "class "на мой бандл MyAssetBundle::class, то появляется ошибка отсутствия метода MyAssetBundle::getBundle().
класс - yii\web\AssetManager, не бандл должен тут быть
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Динамические AssetBundle

Сообщение zelenin »

просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
Аватара пользователя
edwardstock
Сообщения: 16
Зарегистрирован: 2013.04.08, 19:14
Откуда: Москва

Re: Динамические AssetBundle

Сообщение edwardstock »

zelenin писал(а):просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
задача простая до безумия..
есть директория в расширении, в которой будут создаваться, удаляться, обновляться ресурсы (стили и jsники), количество директорий и файлов не известно, нужно это все опубликовать одним махом :)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Динамические AssetBundle

Сообщение zelenin »

edwardstock писал(а):
zelenin писал(а):просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
задача простая до безумия..
есть директория в расширении, в которой будут создаваться, удаляться, обновляться ресурсы (стили и jsники), количество директорий и файлов не известно, нужно это все опубликовать одним махом :)
ну может она и проста, но я не понмиаю какие у вас трудности?

https://github.com/zelenin/yii2-summernote-widget вот мое расширение, очень просто - изучите.
Аватара пользователя
edwardstock
Сообщения: 16
Зарегистрирован: 2013.04.08, 19:14
Откуда: Москва

Re: Динамические AssetBundle

Сообщение edwardstock »

zelenin писал(а):
edwardstock писал(а):
zelenin писал(а):просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
задача простая до безумия..
есть директория в расширении, в которой будут создаваться, удаляться, обновляться ресурсы (стили и jsники), количество директорий и файлов не известно, нужно это все опубликовать одним махом :)
ну может она и проста, но я не понмиаю какие у вас трудности?

https://github.com/zelenin/yii2-summernote-widget вот мое расширение, очень просто - изучите.
все, я понял, тупка просто какая-то, написал кучу кода, а на этих ассетах заморочился, голова не варит.. спасибо за пример!
Ответить