1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace dynamikaweb\googlechart; |
4
|
|
|
|
5
|
|
|
use yii\helpers\ArrayHelper; |
6
|
|
|
use yii\helpers\Html; |
7
|
|
|
use yii\helpers\Json; |
8
|
|
|
use yii\web\View; |
9
|
|
|
|
10
|
|
|
|
11
|
|
|
class HtmlChart extends \yii\base\Widget |
12
|
|
|
{ |
13
|
|
|
public $containerId; |
14
|
|
|
|
15
|
|
|
public $visualization; |
16
|
|
|
|
17
|
|
|
public $packages = 'corechart'; |
18
|
|
|
|
19
|
|
|
public $loadVersion = "1.1"; |
20
|
|
|
|
21
|
|
|
public $data = []; |
22
|
|
|
|
23
|
|
|
public $options = []; |
24
|
|
|
|
25
|
|
|
public $scriptAfterArrayToDataTable = ''; |
26
|
|
|
|
27
|
|
|
public $htmlOptions = []; |
28
|
|
|
|
29
|
|
|
public $tag = "div"; |
30
|
|
|
|
31
|
|
|
public function run() |
32
|
|
|
{ |
33
|
|
|
$id = ArrayHelper::getValue($this->options, 'id', $this->getId()); |
34
|
|
|
// if no container is set, it will create one |
35
|
|
|
if ($this->containerId == null) { |
36
|
|
|
$this->htmlOptions['id'] = 'div-chart' . $id; |
37
|
|
|
$this->containerId = $this->htmlOptions['id']; |
38
|
|
|
echo Html::tag($this->tag, null, $this->htmlOptions); |
39
|
|
|
} |
40
|
|
|
$this->registerClientScript($id); |
41
|
|
|
} |
42
|
|
|
|
43
|
|
|
/** |
44
|
|
|
* Registers required scripts |
45
|
|
|
*/ |
46
|
|
|
public function registerClientScript($id) |
47
|
|
|
{ |
48
|
|
|
$jsData = Json::encode($this->data); |
49
|
|
|
$jsOptions = Json::encode($this->options); |
50
|
|
|
|
51
|
|
|
$script = ' |
52
|
|
|
google.setOnLoadCallback(drawChart' . $id . '); |
53
|
|
|
function drawChart' . $id . '() { |
54
|
|
|
var data = google.visualization.arrayToDataTable(' . $jsData . '); |
55
|
|
|
' . $this->scriptAfterArrayToDataTable . ' |
56
|
|
|
var options = ' . $jsOptions . '; |
57
|
|
|
' . $id . ' = new google.visualization.' . $this->visualization . '(document.getElementById("' . $this->containerId . '")); |
58
|
|
|
' . $id . '.draw(data, options); |
59
|
|
|
}'; |
60
|
|
|
|
61
|
|
|
$view = $this->getView(); |
62
|
|
|
$view->registerJsFile('https://www.google.com/jsapi',['position' => View::POS_HEAD]); |
63
|
|
|
$view->registerJs('google.load("visualization", "' . $this->loadVersion . '", {packages:["' . $this->packages . '"]});', View::POS_HEAD, __CLASS__ . '#' . $id); |
64
|
|
|
$view->registerJs($script, View::POS_HEAD, $id); |
65
|
|
|
} |
66
|
|
|
} |
67
|
|
|
|