kimono
@kimono
Web developer

Команда yii asset/template в YII?

Пытаюсь приручить JquerySparkline. Проблема в том, что на гитхабе в родном репозитории нет готового собранного sparkline-js-файла (странно, но автор считает, что так лучше и публикует только отдельные модули, которые каждый должен собрать под себя, ну или все вместе).
Пишем файл ресурсов для Sparkline
common/assets/sparkline/Gwatts_JquerySparklineAsset_combine.php
:
class Gwatts_JquerySparklineAsset_combine extends AssetBundle
    {
        public $sourcePath = '@vendor/gwatts/jquery.sparkline/src';
        public $js         = [
            'header.js',
            'defaults.js',
            'utils.js',
            'simpledraw.js',
            'rangemap.js',
            'interact.js',
            'base.js',
            'chart-line.js',
            'chart-bar.js',
            'chart-tristate.js',
            'chart-discrete.js',
            'chart-bullet.js',
            'chart-pie.js',
            'chart-box.js',
            'vcanvas-base.js',
            'vcanvas-canvas.js',
            'vcanvas-vml.js',
            'footer.js',
        ];
    }

Замечу сразу, что он не будет работать, потому что js-куски в реальности - никак не связанные куски и браузер их не ест. Хорошо что в YII есть сборщик пакетов. Иду в консоль, пишу
yii asset/template common/assets/sparkline/Gwatts_JquerySparklineAsset_config.php
, создается файл, захожу в него и настраиваю:
// я не хочу сразу публиковать собранный файл на прод, а хочу оставить его внутри проекта, чтобы потом подключать к двум поддоменам поотдельности
// файл будет лежать в папке common/assets/sparkline/sparkline.js
Yii::setAlias('@webroot', __DIR__.'/sparkline');
Yii::setAlias('@web', '/');

return [
        // Adjust command/callback for JavaScript files compressing:
        'jsCompressor'  => 'java -jar compiler.jar --js {from} --js_output_file {to}',
        // Adjust command/callback for CSS files compressing:
        'cssCompressor' => 'java -jar yuicompressor.jar --type css {from} -o {to}',
        // The list of asset bundles to compress:
        'bundles'       => [
            // этот файл содержит список тех самых js-кусков кода, которые необходимо собрать
            // описание его ниже
            common\assets\Gwatts_JquerySparklineAsset_combine::className(),
        ],
        // Asset bundle for compression output:
        'targets'       => [
            'Gwatts_JquerySparklineAsset' => [
                'class'      => common\assets\Gwatts_JquerySparklineAsset_combine::className(),
                'basePath'   => '@webroot',
                'baseUrl'    => '@web',
                'js'         => 'sparkline.js',
            ],
        ],
        // Asset manager configuration:
        'assetManager'  => [
            'basePath' => '@webroot',
            'baseUrl'  => '@web',
        ],
    ];

Запускаю
yii asset/compress common/assets/sparkline/Gwatts_JquerySparklineAsset_config.php common/assets/sparkline/Gwatts_JquerySparklineAsset_bundle.php
. В итоге в папку common/assets/sparkline попадает папка 3c99cc05 со всеми нашими js-кусками и файл sparkline.js. Также в ней создается файл Gwatts_JquerySparklineAsset_bundle.php со следующим содержимым:
return [
    'Gwatts_JquerySparklineAsset' => [
        'class' => 'common\\assets\\Gwatts_JquerySparklineAsset_combine',
        'basePath' => '@webroot',
        'baseUrl' => '@web',
        'js' => [
            'sparkline.js',
        ],
        'css' => [],
    ],
    'common\\assets\\Gwatts_JquerySparklineAsset_combine' => [
        'sourcePath' => null,
        'js' => [],
        'css' => [],
        'depends' => [
            'Gwatts_JquerySparklineAsset',
        ],
    ],
];

Нам, по сути, он не нужен. Повторюсь - мне нужно было лишь собрать sparkline в один файл, поэтому создаем еще один файл ресурсов Gwatts_JquerySparklineAsset:
class Gwatts_JquerySparklineAsset extends AssetBundle
    {
        public $sourcePath = '@common/assets/sparkline';
        public $js         = [
            'sparkline.js',
        ];
    }

Вот его то и можно цеплять к проекту в любом месте.

Теперь вопросы:
1. Можно ли как-то упростить все это дело?
2. Обязательно ли было создавать столько файлов?
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы