`
cntnn11
  • 浏览: 686 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

php生成extjs类

 
阅读更多

这段时间研究extjs的使用,用来做些前端显示。要给同事用,所以临时写了一个简单的生成extjs代码的php类。只提供了一些基本的设置。

 

 

<?php
/* extjs的PHP类说明
 * 方法调用说明:--开始--
 *{
 * PHP程序页:
 * 		$extjsChart=new extjsChart();//声明类,2011-10-26之前无需传递任何参数进去
 * 		创建图表:$extjsChart->create('传递画图用的数据数组','图表类型:line曲线,pie饼形图【目前只有这两种图表】','页面显示的ID','图表标题','图表宽度:500','图表高度:300','项目类型:chart')
 * 			create类里数据、图表类型为必填项!
 * 		Exp:$this->chart_line=$extjsChart->create($data_line,'line','chart_line',$data['tit'],'1024','450','chart');
 * HTML页面
 * 		在js代码标签里加入该段即可。
 * 		Ext.onReady(function(){
		{%$loadextjsfile%};

		var donut = true;//不明白
			{%$chart_line%};//$chart_line为从php接收返回的extjs图表代码
		});
 *}
 * 方法调用说明:--结束--
 * 
 * 数据结构:--开始--
 * {
 * PHP下的数据结构,在进行方法调用时,线json_encode转换成json数据,便于extjs处理
 *  fields用于生成图例
 * 	fields下的键值表示相对应的线条,在饼形图里表示相对应的块
 * 		fields有多少键值,则图表有多少条线或块
 * data存储数据
 * 	data[]['name']:曲线图中表示X轴的刻度
 * 					饼形图中表示每个块
 *  data[]['cost/线条一、线条二....']:曲线图中使用['线条一、线条二....']表示每条线的在当前X轴上刻度时的数据,与fields的键值对应
 * 									饼形图中使用cost来显示每个块的值
 * $chartdata=array(
		array(
			"fields"=>
				array("线条一","线条二","....")
			),
		array(
			"data"=>
				array("name"=>'1','线条一'=>'646487','线条二'=>'654878'),
				array("name"=>'1','线条一'=>'646487','线条二'=>'654878'),
				array("name"=>'1','线条一'=>'646487','线条二'=>'654878'),
				......
 *		)
 * )
 * }
 * 数据结构:--结束--
 * 
 * 编辑时间:2011-10-26
 * 编辑人:谭宁宁
 */
class extjsChart
{
	public $title='';
	/*public $width='500';
	public $height='350';
	public $div='Ext.getBody()';*/
	public $layout='fit';

	public $items_type='chart';
	
	function __conststruct()
	{
		$this->loadfile=$this->loadfile();
	}
	
	function loadextjsfile()
	{
		$file="Ext.require(['Ext.data.*']);
			Ext.require('Ext.chart.*');
			Ext.require('Ext.layout.container.Fit')";
		return $file;
	}
	
	/*
	 * 创建图表方法
	 * create($data,$stype,$items_type,$title)
	 * $data为基本数据,$stype为图表的类型,分:pie饼形图、line折线图    这两个参数必须规定
	 * $data有固定的数据格式
	 * $items_type对象类型:即使用extjs创建一个什么,默认是chart图表对象
	 * $title:图表名称,可要可不要
	 */
	function create($data,$stype,$div,$title='',$width='500',$height='350',$items_type='chart')
	{
		$this->data=$data;
		$this->stype=$stype;
		$this->div=$div;
		$this->width=$width;
		$this->height=$height;
		$json_data=json_encode($data);
		$this->dataname=$this->getMicrotime();
		
		$chart='';
		$chart.="window.".$this->dataname."=Ext.create('Ext.data.JsonStore',".($json_data).");";
		$chart.="var panel".time()." = Ext.create('widget.panel',{
				width: ".$width.",
				height: ".$height.",
				title: '$title',
				renderTo: '".$div."',
				layout: '".$this->layout."',";
		$chart.=$this->items($items_type);
		$chart.="})";
		return $chart;
	}
	
	/*
	 * 在创建好的对象里新建一个items项目
	 * $items_type同create()方法的$tiems_type
	 * 默认为chart图表项目
	 */
	function items($items_type)
	{
		$items='';
		$items.="items:{
					xtype: '$items_type',
					id: '".($this->div=='Ext.getBody()' ? 'chart_'.time() : $this->div)."',
					animate: true,
					store: ".$this->dataname.",
					shadow: true,
					legend:
					{ position: 'right'},
					insetPadding: 30,";
		$items.=$this->series($this->stype);
		$items.="}";
		return $items;
	}
	
	function axes($data)
	{
		$axes='';
		$axes.="axes:[{
				type: 'Numeric',
				minimum: 0,
				position: 'left',
				fields: [";
		//该行获取坐标轴的字段?
		$t=1;
		foreach($data['fields'] as $k=>$v) 
		{
			if($k=='name')
			{ continue;}
			$name.="'".$k."'";
			$name.=$t<count($data['fields']) ? ',' : '';
			$t++;
		}
		$axes.=$name."],
				grid:{odd:{opacity: 1,fill: '#ddd',stroke: '#bbb','stroke-width': 0.5}}
				},{
				type: 'Category',
				position: 'bottom',
				fields: ['name']
				}],";
		return $axes;
	}
	
	/*
	 * 画出线条 series()
	 * $stype为图表的类型
	 * 	pie:饼形图
	 * 	line:折现/曲线图
	 */
	function series($stype)
	{
		$data=$this->data;
		$series='';
		switch ($stype)
		{
			case 'pie':
				$series=$this->pie();
				break;
			case 'line':
			default :
				$series=$this->line();
				break;
		}
		return $series;
	}
	function tbar()
	{
		$tbar='';
		$tbar.="tbar: [{
            text: 'Reload Data',
            handler: function() {
                store1.loadData(generateData(6, 20));
            }
        }, {
            enableToggle: true,
            pressed: false,
            text: 'Donut',
            toggleHandler: function(btn, pressed) {
                var chart = Ext.getCmp('chartCmp');
                chart.series.first().donut = pressed ? 35 : false;
                chart.refresh();
            }
        }],";
        return $tbar;
	}
	
	/*
	 * 生成饼形图
	 */
	function pie()
	{
		$series_pie='';
		$series_pie.="series:[{
						type: 'pie',
						field: 'cost',
						showInLegend:true,
						tips:{
							trackMouse: true,
							width: 160,
							height: 60,
							renderer: function(storeItem, item)
							{
								var total = 0;
								".$this->dataname.".each(function(rec)
								{ total += rec.get('cost'); });

								this.setTitle(storeItem.get('name') + ': ' + Math.round((total==0 ? 0 : storeItem.get('cost')/total * 100)) + '%');
							}
						},
						highlight:{
							segment: { margin: 20 }
		                },
						label:{	field: 'name', display: 'rotate', contrast: true, font: '18px 幼圆'}
					}]";
		return $series_pie;
	}
	
	/*
	 * 生成折线图
	 */
	function line()
	{
		$data=$this->data;
		unset($data['fields']['name']);
		
		$series_line='';
		$series_line.=$this->axes($data);
		$series_line.='series:[';
		$t=1;
		foreach($data['fields'] as $k=>$v)
		{
			$series_line.="{type: 'line',
						highlight: {size: 10,radius: 1},
						axis: 'left',
						xField: 'name',
						yField: '".$k."',
						tips:{
							trackMouse: true,width: 150,height: 60,
							renderer: function(storeItem, item)
							{ this.setTitle('".$k."'+'-'+storeItem.get('name')+'<br />'+storeItem.get('".$k."'));}
						},
						markerConfig: {type: 'cross',size: 4,radius: 4,'stroke-width': 0}";
			$series_line.=$t<count($data['fields']) ? '},':'}]';
			$t++;
		}
		return $series_line;
	}
	
	/*
	 * 创建一个表格
	 * 需要参数:$data,$div;
	 * 数据格式:
	 * 		array();
	 */
	function create_grid($data,$div='Ext.getBody()',$width='',$height='')
	{
		$grid_name=$this->getMicrotime();
		
		$grid_JS='';
		$grid_JS.="
			Ext.Loader.setConfig({enabled: true});
			Ext.Loader.setPath('Ext.ux', '../ux/');
			Ext.require(['Ext.data.*','Ext.grid.*','Ext.util.*','Ext.ux.data.PagingMemoryProxy','Ext.ux.ProgressBarPager']);";
		
		$grid_data="var ".$grid_name."=Ext.create('Ext.data.ArrayStore',".json_encode($data).");";
		
		$grid_JS.=$grid_data;
		
		$grid_table="Ext.create('Ext.grid.Panel',{";
		$grid_table.=$this->width($width);
		$grid_table.=$this->height($height);
		$grid_table.=$this->rederTo($div);
		$grid_table.="store:".$grid_name.",
		columns:[";
		//给表格建立索引
		$grid_table_t="";
		$t=0;
		$d=',';
		foreach($data['fields'] as $k=>$v)
		{
			if(count($data['fields'])-$t==1)
			{$d='';}
			$grid_table_t.="{text:'".$v."',dataIndex:'".$v."',flex:1}".$d;
			$t++;
			//echo $t.'-'.$v.'-'.$d.'<br />';
		}
		unset($t);unset($d);
		
		$grid_table.=$grid_table_t."]});";
		
		$grid_JS.=$grid_table;

		return $grid_JS;
	}
	
	function width($width)
	{
		return $width=='' ? '' : 'width:'.$width.',';
	}
	
	function height($height)
	{
		return $width=='' ? '' : 'height:'.$height.',';
	}
	
	function rederTo($rederTo)
	{
		return $rederTo=='' ? 'Ext.getBody()' : 'renderTo:'."'".$rederTo."',";
	}
	
	/*
	 * 获取当前系统的微秒,用于返回一个extjs 对象名,extjs图表的数据对象名不能重复
	 */
	function getMicrotime()
	{
		$time=microtime();
		$t=array();
		$t=explode(" ",$time);
		$t=str_replace('.','', $t);
		return 'data_'.$t[0];
	}
}
?>


0
0
分享到:
评论

相关推荐

    extjs动态生成表格,前台+后台

    在本文中,我们将深入探讨如何使用ExtJS框架在前端动态生成表格,并结合后端数据进行展示。ExtJS是一个强大的JavaScript库,专用于构建富客户端Web应用程序,尤其在创建交互式用户界面方面表现突出。动态生成表格是...

    基于extjs+php的extploer程序

    4. **文件下载**:用户可以直接点击文件名下载,EXTJS会生成一个隐藏的iframe来处理文件流,PHP则提供下载链接并设置必要的HTTP头信息。 5. **搜索功能**:EXTJS的表单组件配合PHP的查询功能,用户可以快速搜索...

    进销存php源码(extjs)

    PHP源码会包含处理这些财务数据的逻辑,如计算利润、追踪欠款、生成财务报表等。通常,账册管理模块会与仓库管理模块紧密结合,确保库存变化与财务记录的一致性。 在压缩包中的“进销存免费版”文件,很可能是这个...

    ExtJs 连接数据库并且生成动态树

    在“ExtJs 连接数据库并且生成动态树”这个主题中,我们将探讨如何利用ExtJs来连接后端数据库,并动态生成树形结构来展示数据。 首先,要实现ExtJs连接数据库,你需要一个服务器端的数据接口,它可以是基于PHP、...

    php+extjs编程实例(学习很受用!)

    1. **PHP基础知识**:首先,你需要理解PHP的基础语法,包括变量、常量、数组、控制结构(如if-else、switch-case)、函数、类和对象等。熟悉PHP的数据类型和错误处理也非常重要。 2. **PHP与MySQL交互**:PHP常常...

    Extjs4生成树

    在本文中,我们将探讨如何使用ExtJS4生成树形结构以及实现动态加载功能。ExtJS4是一款强大的JavaScript库,特别适合构建富客户端应用,其中树组件(Tree)是其重要组成部分,用于展示层次化的数据。 首先,让我们...

    extjs 导入导出 Exel

    5. 服务器端使用诸如PHP、Java、Python 等后端语言解析数据并生成Excel 文件。 6. 服务器返回生成的Excel 文件,EXTJS 接收到文件后,可以触发浏览器的下载行为。 ### 利用服务器实现Excel 数据导入 文件"Extjs...

    ExtJS(ajax框架) 4.2.1

    类系统:作为Extjs 4架构更新的一部分,引用了一个功能更完整的类系统。 沙盒:在ExtJS历史上,ExjJS 4首次提供了完整的沙盒模式。从ExtJS 4开始,框架不再扩展数组或函数等原生对象,因此,与其它的框架同时加载到...

    extjs实现登陆验证

    2. **添加验证码图片**:为了展示验证码,代码中使用`Ext.getDom`获取到了验证码输入框的DOM元素,并在其父节点中插入了一张图片,图片的源地址指向了`code.php`,这是一个后端生成随机验证码的脚本。 3. **表单...

    ExtJS+FusionCharts结合的两种方法

    例如,你可以使用FusionCharts的PHP、Java、.NET等服务器端库来生成图表的SVG或Flash代码,再通过Ajax请求获取这些代码,最后在ExtJS的组件中显示。 在实际应用中,我们还需要关注以下几点: - **数据源的处理**:...

    extjs参考手册(pdf格式)

    - 显示动态生成的 DOM 元素,并允许直接编辑 DOM,即时预览修改效果。 - 提供 Console 控制台,支持实时执行 JavaScript 脚本,便于日志记录与调试。 - 对于 Ajax 请求,可监控发送的数据及响应状态,便于排查...

    Extjs 6 纯前端小测试项目

    在实际开发中,开发者通常会结合服务器端技术,如PHP、Java或Node.js,来处理数据和业务逻辑,与前端的ExtJS应用程序进行交互。同时,ExtJS的可扩展性和丰富的组件库使得它非常适合构建复杂的、企业级的Web应用程序...

    thinkphp+extjs

    【标题】"thinkphp+extjs" 涉及的技术栈是PHP的MVC框架ThinkPHP与前端组件库ExtJS的结合应用,用于构建CMS(内容管理系统)。 【描述】"thinkphp+extjs +jquery CMS管理系统 实现多选下拉树 下拉表格" 提示了系统的...

    ExtJS构造动态异步加载

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在动态加载树的场景中,服务器返回的JSON数据应包含树节点的信息,如ID、文本、子节点数组等。例如:...

    Extjs和后台数据库交互的程序,增删改查

    ExtJS与后台通信通常采用JSON格式,它是轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。数据在前后端之间以JSON格式传输,提高了数据处理效率。 10. **部署与运行** 提供的项目文件“extJs”...

    extjs3.3+php+mysql

    开源http://www.media-sky.com 账号admin 密码 wsladmin 系统管理代码,应用技术主要是extjs3.3 加 mysql 数据库,本下载提供数据库结构...系统包含批量上传图片,导入导出excel,发送邮件,发送短信,生成静态页面等。

    ExtJS4.0下的文件上传方式代码filesupload

    6. **服务器端处理**:服务器端需要接收并处理这些文件,通常涉及接收文件流、保存到指定位置、生成响应信息等。服务器端语言如PHP、Java、Node.js等都有相应的处理机制。 7. **错误处理**:无论是客户端还是服务器...

    ExtJs GUI Designer 2.1

    3. **代码生成**:完成设计后,工具会自动生成对应的ExtJs代码,这些代码遵循最佳实践,可读性强,易于维护。 4. **版本控制**:提供的`changes.txt`文件可能记录了GUI Designer 2.1相较于前一版本的改进和更新,这...

    ExtJS教程.pdf

    ### ExtJS教程知识点详解 #### 1.1 一切从ExtJS发布包开始 ExtJS是一款功能强大且灵活的企业级JavaScript框架,它提供了丰富的UI组件、高性能的数据处理能力及多种实用工具,使得开发者能够轻松创建复杂的Web应用...

    Aptana 的 Extjs 3.1 插件

    4. **模板和代码片段**:预定义的模板和代码片段可以快速生成常见的ExtJS结构,如组件创建和布局管理。 5. **调试支持**:通过集成的调试器,你可以设置断点,逐步执行代码,查看变量状态,帮助定位和解决问题。 ...

Global site tag (gtag.js) - Google Analytics