aldaflux/chartjs-bundle

Symfony5 中集成 Chartjs

安装: 184

依赖者: 0

建议者: 0

安全性: 0

星星: 0

关注者: 1

分支: 5

类型:symfony-bundle

v1.2.2 2020-09-27 10:51 UTC

This package is auto-updated.

Last update: 2024-09-14 18:47:33 UTC


README

从优秀的 https://github.com/Aldaflux-produccions/ChartjsBundle (Symfony2 / Symfony 3) 分支而来,现在兼容 Symfony 5

Symfony 5 Bundle,允许我们在项目中添加图表,使用 Chart.js 2.4.0 库。

如何使用它

安装

composer require aldaflux/chartjs-bundle dev-master

此命令要求您全局安装 Composer,如 Composer 文档的安装章节中所述。

然后,通过在您的项目中的 app/AppKernel.php 文件中添加以下行来启用该包

   new Aldaflux\ChartjsBundle\ChartjsBundle(),

使用

使用以下配置配置 config/packages/aldaflux_chartjs.yaml

chartjs:
    animation:
        duration: 1000
        easing: easeOutQuart
    layout:
        padding: 0
    legend:
        display: true
        position: 'top'
        fullWidth: true
        reverse: false
        labels:
            boxWidth:	40
            fontSize:	12
            fontStyle:	'normal'
            fontColor:	'#666'
            fontFamily:	"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"
            padding:	10
            usePointStyle:	false
    title:
        display: false
        position: 'top'
        fontSize: 12
        fontFamily:	"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"
        fontColor: '#666'
        fontStyle: 'bold'
        padding: 10
        text:	''

此配置是针对 Chartjs 的全局 配置

app/config/routing.yml 中注册路由

# app/config/routing.yml

Aldaflux_chartjs:
    resource: "@ChartjsBundle/Resources/config/routing.xml"

路由文件仅包含图表示例

https:///xxx/web/app_dev.php/testchart/mainTest

发布资产

$ php app/console assets:install web

将所需的样式表和 JavaScript 添加到您的布局中

在顶部添加 jQuery(jQuery 库不在资产中,您必须从 https://jqueryjs.cn/ 下载)

    <script src="{{ asset('js/jquery.min.js') }}"></script>

Chart.js JavaScript

    <script src="{{ asset('bundles/charjsbundle/js/Chart.min.js') }}"></script>

您可以选择仅添加 JavaScript 或使用扩展 twig,在您希望显示图表的模板中添加以下 twig

{{ chartjs_canvas('myPieChart',graphica.width,graphica.height,graphica) }}

第一个参数是 Canvas id,它是强制的并且必须是唯一的,Canvas 宽度,Canvas 高度和一个数组,graphicChart,具有特殊结构。

构建图表的数组结构(Aldaflux\ChartjsBundle\Model\ChartBuiderData)。示例

        $graphicChart = new ChartBuiderData();
        $graphicChart->setType(TypeCharjs::CHARJS_BAR);
        $graphicChart->setLabels(array('Barcelona','New York','Londres','Paris','Berlin','Tokio','El Cairo'));
        $graphicChart->setData(
          array(
              'Profit' => array(23,45,65,12,34,45,88),
              'Cost' => array(13,34,54,11,34,35,48),
          )
        );
        $graphicChart->setBackgroundcolor(
              array(
                  TypeColors::aqua,
                  TypeColors::dark_green
              )
        );
        $graphicChart->setBordercolor(
                array(
                    TypeColors::aqua,
                    TypeColors::dark_green

                )
        );
        $graphicChart->getHeight('150px');
        $graphicChart->getWidth('500px');
        $grafica->setOptions("
                  animation: {
                        duration: 0, // general animation time
                  },
                  hover: {
                      animationDuration: 0, // duration of animations when hovering an item
                  },
                  responsiveAnimationDuration: 0, // animation duration after a resize"
        );

        $grafica->setDatasetConfig('
                      pointStyle: \'star\',
        ');

控制器将是

 public function barAction()   {
        $grafica = new ChartBuiderData();
        $grafica->setType(TypeCharjs::CHARJS_BAR);
        $grafica->setLabels(array('Barcelona','New York','Londres','Paris','Berlin','Tokio','El Cairo'));
        $grafica->setData(
          array(
              'Profit' => array(23,45,65,12,34,45,88),
              'Cost' => array(13,34,54,11,34,35,48),
          ));
          $grafica->setBackgroundcolor(
              array(
                  TypeColors::aqua,
                  TypeColors::dark_green
              )
          );
          $grafica->setBordercolor(
                array(
                    TypeColors::aqua,
                    TypeColors::dark_green
                )
          );
        $grafica->setHeight('150px');
        $grafica->setWidth('500px');
        $grafica->setTitle('Sample Charjs Bar');
        return $this->render('ChartjsBundle:test:testChart.html.twig',array('grafica'=>$grafica,'title'=>$grafica->getTitle()));
    }

有几个与颜色和图表类型相关的帮助类

ChartsType:定义您可以渲染的图表

    CHARJS_BAR = 'bar';
    CHARJS_HORIZONTALBAR = 'horizontalBar';
    CHARJS_RADAR = 'radar';
    CHARJS_LINE = 'line';
    CHARJS_PIE = 'pie';
    CHARJS_DOUGHNUT = 'doughnut';
    CHARJS_POLAR_AREA = 'polarArea';

TypeColors:定义颜色,超过 250 种

 maroon = '128,0,0';
	dark_red = '139,0,0';
	brown = '165,42,42';
	firebrick = '178,34,34';
	crimson = '220,20,60';
	red = '255,0,0';
	tomato = '255,99,71';
	coral = '255,127,80';
	indian_red = '205,92,92';
	light_coral = '240,128,128';
	dark_salmon = '233,150,122';
	salmon = '250,128,114';
	light_salmon = '255,160,122';
	orange_red = '255,69,0';
	dark_orange = '255,140,0';
	orange = '255,165,0';
	gold = '255,215,0';
 ...

您可以通过手动操作或使用服务转换器 $grafica = $this->get('app.chartjs.transformer_char') 来构建此数组,此服务将数据库数据转换为 Array 数据,准备由 Chart.js 渲染

public function transform($type,$data,$fieldLabels,$fieldKpi,$options,$fieldData);

示例

$grafica = $this->get('app.chartjs.transformer_char')->transform(TypeCharjs::CHARJS_PIE,$data,'kpi','zone',$options,'average')->toArray();

此服务有多个参数

图表类型:$type => TypeCharjs::CHARJS_BAR(使用 Aldaflux\ChartjsBundle\Utils\TypeCharjs;)

数据库数据

$data=>
       0 = {array} [4]
           zone = "Europe"
           kpi = "Number of NIUs"
           average = "1250"
       1 = {array} [4]
           zone = "Asia"
           kpi = "Number of NIUs"
           average = "1225"
       2 = {array} [4]
           zone = "Africa"
           kpi = "Number of NIUs"
           average = "1235"
       }

图表中的标签

$fieldLabels => 'zone'

指示器字段

$fieldKpi => 'kpi'

值字段

$fieldData => 'average'

Chartjs 选项

$options => graphic options

此转换将转换为以下数组结构

         $result {array} [2]
              labels = {array}[3]
                         [0] = Europe
                         [1] = Asia
                         [2] = Africa
              data  = {array}[1]
                   Number of NIUs = {array}[3]
                          [0] = 1250
                          [1] = 1225
                          [2] = 1235

Twig 示例

{% extends 'AppBundle:Default:index.html.twig' %}

{% block title %}Sample Chart{% endblock %}

{% block javascript-head %}
    {{ parent() }}
    <script src="{{ asset('js/jquery.min.js') }}"></script>
{% endblock %}

{% block contingut %}
    <div class="container">
        <div class="Absolute-Center centrar">
            <div class="container">
                <h2 style="margin-bottom:20px">Chart</h2>
                <div class="chart">
                <h3>{{ title }}</h3>
                {{ chartjs_canvas('mychar1',grafica.width,grafica.height,grafica) }}
                </div>
            </div>
        </div>
    </div>
{% endblock %}

{% block javascript %}
    {{ parent() }}
    <script src="{{ asset('bundles/charjts/js/Chart.min.js') }}"></script>
{% endblock %}