Echarts php报表类

<?php
/**
 * Echarts 报表类
 * @author 齐福
 * 2017年3月3日 上午11:44:30
 * api 解释需要结合 2.0 和 3.0 因为2.0有的东西  3.0大部分不会出现例如 title 属性 3.0就没有说明
 * 2.0 http://echarts.baidu.com/echarts2/doc/doc.html
 * 3.0 http://echarts.baidu.com/api.html#echarts 
 * @version 1.0
 */
class Echarts
{
	/**
	 * 标题 
	 * @var array("text"=>"报表");
	 */
	var $title = array("text"=>"报表");//报表标题
	/**
	 * 显示提示框
	 * @var array("trigger"=>"axis");
	 */
	var $tooltip = array("trigger"=>"axis");
	/**
	 * 报表图例  一个图例对应个  串联 (series)
	 */
	var $legend = array();
	/**
	 * grid组件 可以有多个 并且有各种控制宽高间距的属性
	 */
	var $grid = array();
	var $xAxis = array();
	/**
	 * y轴 设置成type value则 随着 series data 变化而变化
	 */
	var $yAxis = array("type"=>"value");
	var $series = array();
	var $toolbox = array();
    function get_option(){
    	$vars = get_class_vars("Echarts");
    	$option = array();
    	foreach ($vars as $k=>$v){
    			$option[$k] = $this->$k;
    	}
     	return $option; 
    }
    
}
class Title{
	/**
	 * 显示策略
	 */
	var $show = true;
	/**
	 * 标题显示文字
	 */
	var $text = '';
	/**
	 * 副标题
	 */
	var $subtext = '';
	function set_title($v) {
		foreach ($v as $k=>$v){
			$this->$k = $v;
		}
	}
}
class Legend{
	var $data = array();
	function set_legend($v) {
		foreach ($v as $k=>$v){
			$this->$k = $v;
		}
	}
}
class XAxis{
	var $gridIndex = 0;
	/*
		坐标轴类型
		'value' 数值轴,适用于连续数据。
		'category' 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
		'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
		'log' 对数轴。适用于对数数据。
	*/
	var $type = 'category';
	var $data = array();
	//x 轴的位置。 默认 grid 中的第一个 x 轴在 grid 的下方('bottom'),第二个 x 轴视第一个 x 轴的位置放在另一侧。
	var $position = 'bottom';
	var $boundaryGap = false;
	function set_xAxis($v) {
		foreach ($v as $k=>$v){
			$this->$k = $v;			
		}
	}

}
class YAxis{
	var $gridIndex = 0;
	/*
	 坐标轴类型
	 'value' 数值轴,适用于连续数据。
	 'category' 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
	 'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
	 'log' 对数轴。适用于对数数据。
	 */
	var $type = 'category';
	var $data = array();
	//y 轴的位置。默认 grid 中的第一个 y 轴在 grid 的左侧('left'),第二个 y 轴视第一个 y 轴的位置放在另一侧。  可选  left right
	var $position = 'left';
	var $boundaryGap = false;
	function set_yAxis($v) {
		foreach ($v as $k=>$v){
			$this->$k = $v;
		}
	}
}
/**
 * grid组件 可以有多个 并且有各种控制宽高间距的属性
 */
class Grid{
	/**
	 * 是否显示直角坐标系网格。 
	 */
	var $show=false,
	$left=60,
	$top=60,
	$right='10%',
	$bottom=60,
	$width='auto',
	$height='auto',
	/**
	 * grid 区域是否包含坐标轴的刻度标签,在无法确定坐标轴标签的宽度,容器又比较小无法预留较多空间的时候,可以设为 true 防止标签溢出容器。 
	 */
	$containLabel=FALSE,
	/**
	 *网格背景色,默认透明。 比如 'rgb(128, 128, 128)'  比如 '#ccc' 注意:此配置项生效的前提   设置了 show: true。 
	 */
	$backgroundColor='transparent';
	function set_grid($v) {
		foreach ($v as $k=>$v){
			$this->$k = $v;
		}
	}
}
class Series{
	var $name = '';
	var $type = 'line';
	var $stack = '';
	var $areaStyle ='';
	var $data = array();
	function set_series($v) {
		foreach ($v as $k=>$v){
			$this->$k = $v;
		}
	}
}
class Toolbox{
	var $feature = array();
	/**
	 * 水平安放位置
	 * 可选为:'center' | 'left' | 'right' | {number}(x坐标,单位px)
	 */
	var $x = "right";
	/**
	 * 垂直安放位置
	 * 可选为:'top' | 'bottom' | 'center' | {number}(y坐标,单位px)
	 */
	var $y = "top";
	/**
	 * 工具箱内边距
	 * 配合 x y 使用 
	 */
	var $padding = array(5,100);
	function __construct(){
		$this->feature = new Feature();
	}
}
class Feature{
	/**
	 * 辅助线标志
	 */
	var $mark =array("show"=>false);
	/**
	 * 框选区域缩放
	 */
	var $dataZoom = array("show"=>false);
	/**
	 * 数据视图
	 */
	var $dataView = array("show"=>false);
	/**
	 * 动态类型切换 
	 * type ['line', 'bar', 'stack', 'tiled', 'force', 'chord', 'pie', 'funnel']
	 * line 折线图
	 * bar 柱状图
	 * stack 堆积图
	 * tiled 平铺转换
	 * force 力导向布局图
	 * chord 弦图
	 * pie 饼图
	 * funnel 漏斗图
	 */
	var $magicType = array("show"=>false);
	/**
	 * 还原
	 */
	var $restore = array("show"=>false);
	/**
	 * 保存图片
	 */
	var $saveAsImage = array("show"=>false);
}

//注 报表必须具备 三个属性  xAxis yAxis 和  series
/* $c = new Echarts();
//$v = array("type"=>'1','data'=>array('周一','周二'));
//$x =new XAxis($v);
//$c->set_xAxis($x);
//$c->add_xAxis($v);
 $xa  = new XAxis();
 $xa->position = 'top';
 $xa->data = array("2010-1-2","2010-1-3");
 $c->add_xAxis($xa);
//$xax = $c->xAxis;
$grid = new Grid();
$c->set_grid($grid);
$ya = new YAxis();
$ya->data = array("123","223");
$ya->type = "value";
$c->add_yAxis($ya);

$ser = new Series();
$ser->type = 'line';
$ser->data = array("123","223");
$c->set_series($ser);


echo print_r(json_encode($c->get_option()),true); */


?>

  例如 title 属性 可以通过 title 类的  set_title 扩展属性  
title加链接
$title = new Title();

$title->set_title(array("link"=>"url"));

posted @ 2017-03-08 17:57  啊丢  阅读(212)  评论(0编辑  收藏  举报