Главная > PHP > Построение графиков с помощью PHP и Flash

Построение графиков с помощью PHP и Flash

char

Часто перед web программистом стоит задача построении графиков или диаграмм. Существует много способов решение этой проблемы и об одном из них сегодня пойдет речь. Я покажу как можно с легкостью строить красивые и интерактивные Flash графики используя PHP

Для построение графиков существует множество бесплатных и платных решений на Flash. В этой статье я буду использовать FusionCharts Free. Я остановил свой выбор на FusionCharts по нескольким причинам:

  • Это бесплатное решение;
  • Большой выбор типов графиков и диаграмм;
  • Отличная документация.

И так, начнем. Вначале нужно скачать FusionChartsFree.zip c официального сайта и распаковать архив. Из архива нам понадобятся следующие файлы:

  • FCF_MSLine.swf - флешка, которая будет строить графики;
  • FusionCharts.js — JavaScript библиотека.

Для того чтобы поместить график на страницу нужно вставить в  HTML шаблон следующий код:

  1. FusionCharts.
  2.  var chart = new FusionCharts("FCF_MSLine.swf", "ChartId", "600", "350");
  3.  chart.setDataURL("Data/MSLine.xml");    
  4.  chart.render("chartdiv");

Остановимся подробнее на строке chart.setDataURL(«Data/MSLine.xml»);, она нужна для загрузки данных графика их XML файла находящегося а сервере. В нашем случае будет удобнее использовать функцию setDataXML(), это позволить вставить XML данные непосредственно на страницу с графиком.

Теперь перейдем непосредственно к реализации класса для построения графиков:

  1.  
  2. Class lineChart
  3. {
  4.     //Зададим пути к требуемым файлам
  5.     const FLASH_PATH="./FCF_MSLine.swf";
  6.     const JAVASCRIPT_PATH="./FusionCharts.js";
  7.  
  8.     private $id;        //Идентификатор гафика на странице
  9.     private $width;     //Ширина графика
  10.     private $height;    //Высота графика
  11.     private $caption;   //Заголовок
  12.     private $category;  //Массив категорий (значения оси X)
  13.     private $linesArray;//Массив линий
  14.  
  15.    
  16.     /**
  17.      *  Задаем начальные параметры графика
  18.      *
  19.      * @param string $id Идентификатор графика на странице
  20.      * @param int $width Ширина
  21.      * @param int $height Высота
  22.      */
  23.     public function __construct($id="myChart", $width=400, $height=300)
  24.     {
  25.         $this->id = $id;
  26.         $this->width = $width;
  27.         $this->height = $height;
  28.     }
  29.  
  30.  
  31.     /**
  32.      * Добавление категорий
  33.      *
  34.      * @param array $data массив значений
  35.      */
  36.     public function setCategory($data)
  37.     {
  38.         $this->category = $data;
  39.     }
  40.  
  41.  
  42.     /**
  43.      *  Добавление линии на график
  44.      *
  45.      * @param string $name Название линии
  46.      * @param array $data Массив точек линии
  47.      * @param string $color Цвет линии в формате RGB
  48.      */
  49.     public function addLine($name, $data, $color)
  50.     {
  51.         $this->linesArray[] = array(
  52.             "name" => $name,
  53.             "data" => $data,
  54.             "color"=> $color
  55.         );
  56.     }
  57.  
  58.     /**
  59.      * Установка заголовка графика
  60.      *
  61.      * @param string $caption
  62.      */
  63.     public function setCaption($caption)
  64.     {
  65.         $this->caption = $caption;
  66.     }
  67.  
  68.  
  69.     /**
  70.      * Формирует данные для графика в XML формате
  71.      *
  72.      * @return sring данные в формате XML
  73.      */
  74.     private function buildXmlData()
  75.     {
  76.         $xml = "";
  77.  
  78.         //Формируем категории
  79.         foreach($this->category as $category){
  80.             $xml .= "";
  81.         }
  82.         $xml = "$xml";
  83.  
  84.         //Формируем данные линий
  85.         foreach($this->linesArray as $line){
  86.             $lineXml = '';
  87.             foreach($line['data'] as $dot){
  88.                 $lineXml .= "";
  89.             }
  90.             $xml .= "
  91.                       ."color='{$line['color']}'>$lineXml";
  92.         }
  93.  
  94.         //Формируем конечный XML
  95.         return "$xml";
  96.     }
  97.  
  98.  
  99.     /**
  100.      *  Возвращает HTML код, для добавления графика на страницу
  101.      *
  102.      * @return string
  103.      */
  104.     public function render()
  105.     {
  106.         return
  107.         "
  108.        
    FusionCharts.
  109.        
  110.        var chart = new FusionCharts('".self::FLASH_PATH."',
  111.         '{$this->id}', '{$this->width}', '{$this->height}');
  112.        chart.setDataXML(\"".$this->buildXmlData()."\");
  113.        chart.render('{$this->id}');
  114.        ";
  115.     }
  116. }

Небольшой пример работы класса:

  1. include "lineChart.class.php";
  2. $graph = new lineChart();
  3. $graph->setCategory(array("1.01.2009",
  4.                           "2.01.2009",
  5.                           "3.01.2009",
  6.                           "4.01.2009",
  7.                           "5.01.2009",
  8.                           "6.01.2009"));
  9.  
  10. $graph->addLine("Доллар", array(30,31,32,28,25,36), "1D8BD1");
  11. $graph->addLine("Евро", array(45,40,43,48,35,44), "F1683C");
  12. $graph->setCaption("Курс валют");
  13. echo $graph->render();

И вот что получиться в результате.

Пример работы класса

Скачать пример и класс

Надеюсь, статья будет полезна начинающим PHP программистам. С радостью выслушаю ваши отзывы и комментарии.

Categories: PHP Tags: ,
Комментарии (5) Уведомления (0) Написать комментарий Уведомление
  1. Гонзо
    30 Июнь 2009 в 22:45 | #1
    Ответить | Цитата

    Отлично! То что искал. Спасибо за доходчивые объяснения.

  2. Костя
    16 Июль 2009 в 16:22 | #2
    Ответить | Цитата

    Очень полезная вещь! Единственная проблема — кодировка. Если оставляю UTF-8, то на графике русский, а на всей странице сплошные квадратики. Если ставлю windows-1251 — на графике не понятные знаки (там, где русский язык), зато вся страница нормально на русском. Подскажите, пожалуйста, как это исправить?

  3. Снайпер
    27 Ноябрь 2009 в 11:57 | #3
    Ответить | Цитата

    @Костя
    А что мешает на график подавать русские буквы пропущенные через iconv ?

  4. Вася
    11 Май 2010 в 21:15 | #4
    Ответить | Цитата

    вот еще интересный способ))
    http://prootime.ru/css-graph

  5. votia
    24 Май 2012 в 19:34 | #5
    Ответить | Цитата

    Как добавить в этот график горизонтальный скролинг?

  1. Пока что нет уведомлений.