openflashchart 2.0 简单案例php版

  1.openflashchart是一种比较实用的图标呈现插件,而且是开源的,网址http://teethgrinder.co.uk/open-flash-chart/

  2.FlashChart类

  

复制代码 代码如下:

  FlashChart Class Code

  class FlashChart

  {

  private $id;

  private $height;

  private $width;

  private $path;

  function __construct($path="",$width=300,$height=500,$id="myChart")

  {

  global $flash_chart;

  $this->id=$id;

  $this->height=$height;

  $this->width=$width;

  $this->path=$path;

  if(!$flash_chart)

  {

  echo '<script type="text/javascript" src="'.$path.'js/json/json2.js"></script>';

  echo '<script type="text/javascript" src="'.$path.'js/swfobject.js"></script>';

  echo '<script type="text/javascript" src="'.$path.'js/jquery-1.4.4.min.js"></script>';

  $flash_chart=true;

  }

  }

  function __destruct()

  {

  unset($this->id,$this->height,$this->width,$this->path);

  }

  function setID($id)

  {

  $this->id=$id;

  }

  function setChart($file,$info)

  {

  $tp=new TemplateData($file);

  echo '<script type="text/javascript">';

  echo "data_{$this->id}=".$tp->changeInfo($info).';';

  echo "function ofc_get_dataOf{$this->id}(){return JSON.stringify(data_{$this->id});}";

  echo "swfobject.embedSWF('".$this->path."/open-flash-chart.swf', '$this->id', '$this->width','$this->height','9.0.0','expressInstall.swf',{'get-data':'ofc_get_dataOf{$this->id}'} )";

  echo '</script>';

  }

  }

  3,TemplateData类

  把一个简单的图标的配置从已经写好的txt文本里取出来加载所用的类 :例如

  

复制代码 代码如下:

  {

  "title":

  {

  "text":"(title)",

  "style":"{color:#FF0000;font-size:24px;}"

  },

  "y_legend":{

  "text": "iWebShop",

  "style": "{color: #736AFF;font-size:16px;}"

  },

  "elements":[

  {

  "type": "line",

  "colour": "#736AFF",

  "text": "注册用户量(人)",

  "width": 1,

  "dot-style": {

  "type":"solid-dot", "colour":"#a44a80", "dot-size": 3,

  "tip":"#val#人<br>#x_label#" },

  "on-show": {"type": "shrink-in", "cascade":1, "delay":0.5},

  "values" : [(numbers)]

  }

  ],

  "x_axis":{

  "labels": {

  "labels":[(dates)]

  }

  },

  "y_axis":{

  "steps": (steps),

  "max": (max)

  }

  }

  这是类的内容:

  

复制代码 代码如下:

  class TemplateData

  {

  public $substitution;

  private $templateFile;

  function __construct($filename)

  {

  $this->templateFile=@file_get_contents($filename) or die("not find templateFile");

  }

  function __destruct() {

  unset ($this->templateFile,$this->substitution);

  }

  function setTemplateFile($tfile)

  {

  $this->templateFile=$tfile;

  }

  function getTemplateFile()

  {

  return $this->templateFile;

  }

  function replaceReal($matches)

  {

  extract($this->substitution, EXTR_OVERWRITE);

  return isset($$matches[1])?$$matches[1]:$matches[1];

  }

  function changeInfo($subs)

  {

  $this->substitution=$subs;

  return preg_replace_callback("(\((\w+)\))",array(&$this, 'replaceReal'),$this->getTemplateFile());

  }

  }

  4,调用的代码

  

复制代码 代码如下:

  <!--//这里的myChat是显示flash的地方,所以不能为空,改动的话要在声明FlashChart类的时候定义,详细见FlashChart类-->

  <div class='content_box'><div id="myChart"></div></div>

  <?php

  include("flashchart.php");

  include("templatedata.php");

  $fc=new FlashChart('chart/',"100%",320);

  $infos=array(

  'numbers'=>"30000,10000,5000,6000000,700",

  'dates'=>"\"字符串1\",\"字符串2\",\"字符串3\",\"字符串4\",\"字符串5\"",

  'steps'=>600000,

  'max'=>6000000

  );

  $info=array("title"=>'用户注册统计','numbers'=>$infos['numbers'],'dates'=>$infos['dates'],'steps'=>$infos['steps'],'max'=>$infos['max']);

  $fc->setChart("chart/templatechart/user-add.txt",$info);

  5,还有一个处理数据的函数,把查询出来的数据集转换成ofc用的数据

  

复制代码 代码如下:

  /**

  * @brief ofc数据处理

  * @params 数据库查询出关于x,y轴的数据的数据集

  * @note 后台

  */

  /*

  public function init_count($rs)

  {

  $numbers ='';

  $dates = '';

  $max = 0;

  foreach($rs as $row)

  {

  $numbers .= $row['num'].',';//y轴数据

  $dates .='"'.$row['month'].'",';//x轴数据

  if($max<$row['num']) $max = $row['num'];

  }

  $steps=ceil($max/10);

  $result= array(

  'steps' => $steps,

  'numbers' => strlen($numbers)>1 ? substr($numbers,0,-1):null,

  'dates' => strlen($dates)>1 ? substr($dates,0,-1) : null,

  'max' => $max+$steps

  );

  return $result;

  }