我想在名为" bestia"的joomla组件中使用chart.js。 为此,我在manifest.xml中将chart.js导入为media-element。
我通过执行以下操作来调用js:
JHtml::script(Juri::root() . 'media/com_hostinghelden/chartjs/Chart.js');
现在我想用一个助手来缩短一些事情。我的助手应画一张图...
abstract class JHtmlGraphs
{
public function draw($title = NULL, $labelset = NULL, $data = NULL, $data2 = NULL)
{
$script = "<script> var barChartData_$title = { labels : [ {$labelset} ], datasets : [ { fillColor : 'rgba(220,220,220,0.5)', strokeColor : 'rgba(220,220,220,0.8)', highlightFill: 'rgba(220,220,220,0.75)', highlightStroke: 'rgba(220,220,220,1)', data : [ $data ] }, { fillColor : 'rgba(151,187,205,0.5)', strokeColor : 'rgba(151,187,205,0.8)', highlightFill : 'rgba(151,187,205,0.75)', highlightStroke : 'rgba(151,187,205,1)', data : [ $data2 ] } ] }; window.onload = function(){ var ctx_$title = document.getElementById('canvas_$title').getContext('2d'); window.myBar = new Chart(ctx_$title).Bar(barChartData_$title, { responsive : true }); } </script>";
$canvas = "<div style='width: 100%'><canvas id='canvas_$title' height='20' width='20'></canvas></div>";
return $script . $canvas;
}
}
好吧,如果我调用这个Jhtml-Graphs,图表就会正确呈现:
<?php echo JHtml::_('graphs.draw', "Titel", $labelset, $data, $data2); ?>
但如果我想在页面中添加第二个图表,则不再显示第一个图表:
<?php echo JHtml::_('graphs.draw', "Titel2", $labelset, $data, $data2); ?>
我该怎么办?
答案 0 :(得分:2)
您正在重新声明window.onload
功能。这就是为什么你只画一张(最后)图表。
window.onload = function(){
var ctx_$title = document.getElementById('canvas_$title').getContext('2d');
window.myBar = new Chart(ctx_$title).Bar(barChartData_$title, { responsive : true });
}
你可以做些什么来解决这个问题。我建议改变JHtmlGraphs
课程如下:
abstract class JHtmlGraphs
{
private $titles = array();
public function draw($title = NULL, $labelset = NULL, $data = NULL, $data2 = NULL)
{
$script = "<script> var barChartData_$title = { labels : [ {$labelset} ], datasets : [ { fillColor : 'rgba(220,220,220,0.5)', strokeColor : 'rgba(220,220,220,0.8)', highlightFill: 'rgba(220,220,220,0.75)', highlightStroke: 'rgba(220,220,220,1)', data : [ $data ] }, { fillColor : 'rgba(151,187,205,0.5)', strokeColor : 'rgba(151,187,205,0.8)', highlightFill : 'rgba(151,187,205,0.75)', highlightStroke : 'rgba(151,187,205,1)', data : [ $data2 ] } ] };</script>";
$canvas = "<div style='width: 100%'><canvas id='canvas_$title' height='20' width='20'></canvas></div>";
$this->titles[] = $title; //storing titles
return $script . $canvas;
}
public function finishDrawing() {
$launchCharts = '';
foreach($this->titles as $title) {
$launchCharts .= "var ctx_$title = document.getElementById('canvas_$title').getContext('2d'); window.myBar_$title = new Chart(ctx_$title).Bar(barChartData_$title, { responsive : true });";
}
$this->titles = array();
$script = "<script>window.onload = function(){ $launchCharts }</script>";
return $script;
}
}
我修改了你的脚本。现在,您的onload
函数将从finishDrawing
方法生成一次:
<?php echo JHtml::_('graphs.draw', "Titel", $labelset, $data, $data2); ?>
<?php echo JHtml::_('graphs.draw', "Titel2", $labelset, $data, $data2); ?>
在底部的某个地方你必须调用新功能:
<?php echo JHtml::finishDrawing(); //you better know than me how to call this function?>