Результаты из массива в функцию JS с Google Charts API - PullRequest
0 голосов
/ 24 августа 2011

Я работаю над CMS с открытым исходным кодом на основе CodeIgniter и пытаюсь интегрировать систему диаграмм с API Google Analytics.

Я успешно получил информацию из Google Analytics (например,посещений, просмотров страниц и т. д.), и это дает мне массив:

Array
(
    [] => Array
        (
            [ga:visits] => 800
            [ga:pageviews] => 1200
        )
    [] => Array
        (
            [ga:visits] => 400
            [ga:pageviews] => 900
        )
) ... 

Затем, чтобы использовать информацию, которую я сделал, цикл foreach

foreach ($report as $value) {
            echo $value["ga:visits"];
            echo '-';
        }

У менястатистика с этим "эхо", и это выглядит как 1200-300-450- и так далее.отлично до сих пор.

Что ж, теперь я использую API диаграмм от Google, чтобы создать диаграмму, и у меня есть этот фрагмент кода:

// Load the Visualization API and the piechart package.
      google.load('visualization', '1.0', {'packages':['corechart']});

      // Set a callback to run when the Google Visualization API is loaded.
      google.setOnLoadCallback(drawChart);


      // Callback that creates and populates a data table, 
      // instantiates the pie chart, passes in the data and
      // draws it.
      function drawChart() {

      // Create the data table. I NEED TO PLACE MY RETRIEVED INFORMATIONS FROM THE FOREACH LOOP HERE :
      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Month');
      data.addColumn('number', 'visits');
      data.addRows(8);
      data.setValue(0, 0, 'Day 1');
      data.setValue(0, 1, 1000);
      data.setValue(1, 0, 'Day 2');
      data.setValue(1, 1, 70);
      data.setValue(2, 0, 'Day 3');
      data.setValue(2, 1, 860);
      data.setValue(3, 0, 'Day 4');
      data.setValue(3, 1, 1030);

      // Set chart options
      var options = {
 'title':'test',
'width':1200,
'height':600,
'legend' : 'bottom',
'series' : {0:{color: 'black', pointSize : 12, visibleInLegend: true}},
'backgroundColor' : '#FFFFFF',
                };

      // Instantiate and draw our chart, passing in some options.
      var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
      chart.draw(data, options);
    } 

Я просто хочу использовать полученные изцикл foreach в 'data.setValue (..., ..., ...);'этой функции JS.

1 Ответ

1 голос
/ 24 августа 2011

На вашем месте я бы не просто повторил эхо ga:visits, но сформировал бы массив:

<script type='text/javascript'>
    var ga_data = [
    <?php
        $str = "";
        foreach ($report as $value)
            $str.="{$value["ga:visits"]},";
        $str = rtrim($str,",");
    echo $str;
    ?>
    ];
</script>

Примечание:

  • трейлинг , удален. Chrome и FF просто пропускают его, а IE8 решает, что есть еще один элемент массива. Так что [1,2,] равно [1,2] для Chrome и FF, но [1,2,undefined] для IE.
  • Я поместил его в отдельный тег сценария. Это хорошая идея, когда речь идет об ошибках PHP - они не являются допустимым кодом javascript, поэтому они терпят неудачу во всем блоке сценария, в котором они находятся. Поэтому размещение вывода PHP в отдельный блок сценария не приведет к сбою других сценариев JS в случае ошибок / предупреждений PHP , неправильный код JS и т. д.

Теперь в вашем скрипте вы просто делаете следующее

var data = new google.visualization.DataTable();
data.addColumn('string', 'Month');
data.addColumn('number', 'visits');
data.addRows(ga_data.length*2);
for (i=9; i<ga_data.length; i++){
    data.setValue(i, 0, 'Day '+(i+1));
    data.setValue(i, 1, ga_data[i]);
}

Я думаю, он должен это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...