Пытаюсь приручить
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. Обязательно ли было создавать столько файлов?