Всем привет! Работаю над одним расширением, встал остро вопрос динамической публикации ресурсов. В первом Yii можно было пройтись CAssetMangaer::publish() по файлам, и зная их пути и имена зарегистрировать. Во второй версии что-то непонятное намудрили. Переопределил класс AssetBundle, указал свойство AssetBundle::$sourcePath в @vendor/myext/myResPath/. В myResPath есть еще директории, имена которых известны.
Вопрос: как добавить в массивы AssetBundle::$css и AssetBundle::$js, а так же AssetBundle::$depends (пользовательские зависимости) новые пути к файлам
Может я что-то не понял, тыкните где глянуть.
Спасибо!
Динамические AssetBundle
- edwardstock
- Сообщения: 16
- Зарегистрирован: 2013.04.08, 19:14
- Откуда: Москва
Re: Динамические AssetBundle
надо унаследоваться, а не переопределять.edwardstock писал(а):Переопределил класс AssetBundle
все что в $sourcePath скопируется в web/assets и будет доступноedwardstock писал(а):указал свойство AssetBundle::$sourcePath в @vendor/myext/myResPath/. В myResPath есть еще директории, имена которых известны.
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
не копируется, более того я не пойму механизма регистрации AssetBundle. Если он регистрируется непосредственно в леайуте, через AssetBundle::register(View $view), или например через унаследованный класс MyAssetBudnle::register(View $view), то если я убираю его из шаблона, тот же bootstrap и jquery все равно есть на странице. Если в конфиге компонента assetManager указываю свойство "class "на мой бандл MyAssetBundle::class, то появляется ошибка отсутствия метода MyAssetBundle::getBundle().все что в $sourcePath скопируется в web/assets и будет доступно
Класс выглядит примерно так:
Код: Выделить всё
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();
}
}
}
Re: Динамические AssetBundle
верноedwardstock писал(а): MyAssetBudnle::register(View $view),
бутстрап много где в yii используется, в gridview напримерedwardstock писал(а): то если я убираю его из шаблона, тот же bootstrap и jquery все равно есть на странице.
класс - yii\web\AssetManager, не бандл должен тут бытьedwardstock писал(а): Если в конфиге компонента assetManager указываю свойство "class "на мой бандл MyAssetBundle::class, то появляется ошибка отсутствия метода MyAssetBundle::getBundle().
Re: Динамические AssetBundle
просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
- edwardstock
- Сообщения: 16
- Зарегистрирован: 2013.04.08, 19:14
- Откуда: Москва
Re: Динамические AssetBundle
задача простая до безумия..zelenin писал(а):просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
есть директория в расширении, в которой будут создаваться, удаляться, обновляться ресурсы (стили и jsники), количество директорий и файлов не известно, нужно это все опубликовать одним махом
Re: Динамические AssetBundle
ну может она и проста, но я не понмиаю какие у вас трудности?edwardstock писал(а):задача простая до безумия..zelenin писал(а):просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
есть директория в расширении, в которой будут создаваться, удаляться, обновляться ресурсы (стили и jsники), количество директорий и файлов не известно, нужно это все опубликовать одним махом
https://github.com/zelenin/yii2-summernote-widget вот мое расширение, очень просто - изучите.
- edwardstock
- Сообщения: 16
- Зарегистрирован: 2013.04.08, 19:14
- Откуда: Москва
Re: Динамические AssetBundle
все, я понял, тупка просто какая-то, написал кучу кода, а на этих ассетах заморочился, голова не варит.. спасибо за пример!zelenin писал(а):ну может она и проста, но я не понмиаю какие у вас трудности?edwardstock писал(а):задача простая до безумия..zelenin писал(а):просто скажите, что хотите сделать. все просто, но можно запутаться в определениях.
есть директория в расширении, в которой будут создаваться, удаляться, обновляться ресурсы (стили и jsники), количество директорий и файлов не известно, нужно это все опубликовать одним махом
https://github.com/zelenin/yii2-summernote-widget вот мое расширение, очень просто - изучите.