assetBundles

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

assetBundles

Сообщение Shappy »

Можно читать сразу пост ниже ;)
Добрый день... Не могу разобраться как нормально работать с assetBundles...
Я так понимаю что в yii2 все файлы js, css подключаются через $assetBundles, в начальном примере мы имеем что-то вроде:

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

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/style.less'
    ];
    public $js = [

    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}
Допустим я создаю модуль, в модуле вьюхи, как мне быть если я хочу в этот бандл дописать дополнительно js, css? Я так понял что мне надо:
1. создать в модуле еще один бандл, наследоваться от корневого и дописать в свойства те js и css которые мне нужны...
2. затем во вьюхе уже регистрируем этот новый бандл.

Это нормальный подход, или все можно сделать проще?:)
Так же не понимаю почему файлы не отправляются в assets и как сделать папку assets в модуле, чтобы оттуда брать скрипты и css.
Помогите плз, не могу разобраться...:)
Последний раз редактировалось Shappy 2014.09.20, 14:54, всего редактировалось 3 раза.
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: assetBundles

Сообщение Shappy »

Скорее всего я объяснил так что никто не понял:) Попробую еще разок...

У меня вся работа разбита по модулям.
Мне надо на каждой странице проекта, где отображается вьюха, подключать общие style.less и js.js.
Также на каждой странице подключаются свои less и js для конкретной страницы. Например в site/main/index надо подключить index.less и index.js которые должны быть в модуле site, папке assets/css и assets/js соответственно.
Так как при использовании registerCssFile и лесс файлов конвертации в css не происходит (выдается просто less файл), приходится действовать через AssetBundles.
Создаем в модуле site папку где будем хранить все ассет-бандлы, создаем в ней папку с названием контроллера main и сам файл IndexAsset.php

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

namespace app\modules\site\assetBundles\main;

use yii\web\AssetBundle;

class IndexAsset extends AssetBundle
{
    public $sourcePath = '@app/modules/site/assets/';
    public $jsOptions = ['position' => \yii\web\View::POS_END];
    //public $basePath = '@webroot';
    //public $baseUrl = '@web';
    public $css = [
        'index.less'
    ];
    public $js = [
        'index.js'
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
        'app\assets\AppAsset' // здесь указываем в зависимостях "общий" ассет-бандл в котором подключаются less и js для всех страниц, т.е. style.less и js.js. 
    ];
}
Ну и затем в каждой вьюхе используем свой ассет-бандл, регистрируя его.

Так вот, хотел спросить, можно ли как-то лучше выйти из ситуации?:) Может я что-то не так делаю, а то очень много телодвижений для всего этого дела...
Может можно как-то сделать конвертацию из less в css в registerCssFile? Тогда можно было бы не париться с assetBundle`ами, просто во вьюхе добавлять нужные js и css через registerCssFile, registerJsFile...
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: assetBundles

Сообщение zelenin »

делайте отдельные бандлы, регистрируйте их во вьюшке.
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: assetBundles

Сообщение Shappy »

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

Re: assetBundles

Сообщение zelenin »

делайте один бандл, где в ините будет какое-то правило, по которому в разной вьюшке будут разные файлы
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: assetBundles

Сообщение Shappy »

zelenin писал(а):делайте один бандл, где в ините будет какое-то правило, по которому в разной вьюшке будут разные файлы
Спасибо большое, именно так и сделаю! Как я до этого не додумался))
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: assetBundles

Сообщение mickgeek »

Я как-то делал для одного виджета нечто похожее:
https://github.com/mickgeek/yii2-daslid ... rAsset.php
https://github.com/mickgeek/yii2-daslid ... et.php#L72

То есть нужно будет экспортировать только один класс, а после подключения основного бандла можно подключить уже и любой дополнительный.
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: assetBundles

Сообщение Faenir »

Бандлы вообще в текущей дев версии нормально работают? Что-то я не могу заставить работать...
Создаю обычный бандл MainAsset

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

use yii\web\AssetBundle;

class MainAsset extends AssetBundle
{
    public $sourcePath = '@app/assets/main';

    public $css = [
        '/style/main/style.css',
    ];
}
В <head> пишу

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

MainAsset::register($this) 
При этом создается папка в assets с файлом "/style/main/style.css", но нифига не подключается в <head>... ни одного css файла
Что я делаю не так?
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: assetBundles

Сообщение Shappy »

MrArthur писал(а):Бандлы вообще в текущей дев версии нормально работают? Что-то я не могу заставить работать...
Создаю обычный бандл MainAsset

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

use yii\web\AssetBundle;

class MainAsset extends AssetBundle
{
    public $sourcePath = '@app/assets/main';

    public $css = [
        '/style/main/style.css',
    ];
} 
В <head> пишу

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

MainAsset::register($this)
При этом создается папка в assets с файлом "/style/main/style.css", но нифига не подключается в <head>... ни одного css файла
Что я делаю не так?
В Вашем случае стили надо хранить в /web/css, джаваскрипты, например, в /web/js. В assets оригиналы класть не нужно. Ну и

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

public $sourcePath = '@app/assets/main'; 
Заменить на

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

public $basePath = '@webroot';
public $baseUrl = '@web';
 
Как я понимаю, фреймворк не будет копировать файлы в assets, если нет нужды, файлы у Вас и так доступны, так что он бросто будет их брать из директории /web/css/ ... /style.css
Ссылка будет начинаться от "web".
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: assetBundles

Сообщение Faenir »

Не понял ничего. Зачем мне хранить в /web/js если я могу их положить куда мне удобно (в тему, в модуль и т.д.) и оттуда они уже автоматом скопируются в assets?
Я не пойму, почему не подключаются эти стили в <head>

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

<link href="/assets/название_папки/style/main/style.css" rel="stylesheet"> 
Вот этого кода нет.. ни одного <link> нет вообще...
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: assetBundles

Сообщение Faenir »

Странно. Дома на чистом app/advanced - точно такой же бандл работает... Куда копать?)
Ответить