openflashchart 2.0 简单案例

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文本里取出来加载所用的类 :例如       

View Code
{
"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)
  }
}

这是类的内容:

View Code
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,调用的代码

View Code
<!--//这里的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用的数据

View Code
/**
 * @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;
}

 把附件也传上来算了http://115.com/file/dpnrwpyg

  

 

 

posted @ 2012-05-18 13:09  天纵  阅读(401)  评论(0编辑  收藏  举报