PHP ? EasyUI DataGrid 资料取的方式介绍


Posted in PHP onNovember 07, 2012

EasyUI DataGrid 是一个用 Jquery 写的 DataGrid,由此可知,是一个 前端 Web UI 技术,一般大家在产生 DataGrid 比较常见的应该就是使用后台 PHP 等后台语言,来直接产生 HTML 语法,来显示 DataGrid,当要对该 DataGrid 操作时,在传递参数到后端,重新产生整各网页。

而 EasyUI DataGrid 支援两种做法,一个是,上述,后台 server 把显示的 HTML 产生好,在给前端显示。另一种是,利用 AJAX 的方式来产生,就只是单纯喂 JSON 格式资料给前端,前端接收到资料后,在自己分析资料利用 JQuery 来刷新 DataGrid 该部分的画面。

这边介绍的是第二种做法,利用 AJAX 技术来做,这样的好处,是可以把 资料层-> 控制层-> 展示层 三层独立来运作,达到我在之前 多层次架构设计前言 所讲的精神,不会像老方法,把 HTML 的产生都放在 PHP 中来产生,造成 PHP 开发人员本身,也要对 HTML 等前端技术也要了解很深才能进行开发的问题。

在来如此作法,为带来另一种好处,就是你前端的 UI 是可以更换,而后台程式却不用来大幅修改。目前支援 JSON 资料格式的 JavaScript DataGrid 有很多各,大家也可以多去参考其他的公司所提供的 DataGrid ,从中选择一个最适合的来使用。

介绍到此,接下来直接看程式码,会更加了解我上述的意思:

首先,需要先设计 HTML UI 介面,定义要显示哪些栏位,栏位的显示名称等,关于这部分的栏位定义,EasyUI DataGrid 也是有提供,使用 JavaScript 来动态定义,而我习惯用 HTML 直接定义,这样 也不复杂,后面在分工上,也比较容易来直接交给 Web 美工人员来直接操作。

这部分重点在 URL 的设定。
DataGrid2.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta name="keywords" content="jquery,ui,easy,easyui,web"> 
<meta name="description" content="easyui help you build your web page easily!"> 
<title>一?l小? easyUI datagrid</title> 
<link rel="stylesheet" type="text/css" href="./JS/EasyUI/themes/default/easyui.css"> 
<link rel="stylesheet" type="text/css" href="./JS/EasyUI/themes/icon.css"> <script type="text/javascript" src="./JS/jquery.js"></script> 
<script type="text/javascript" src="./JS/EasyUI/jquery.easyui.min.js"></script> 
</head> 
<body> 
<h2>一?l小? easyUI datagrid url test</h2> 
<table id="tt" class="easyui-datagrid" style="width:750px;height:300px" 
url="datagrid2_getdata.php" title="Load Data" pagination="true"> 
<thead> 
<tr> 
<th field="UNum" width="80">UNum</th> 
<th field="STUID" width="120">User ID</th> 
<th field="Password" width="80" align="right">Password</th> 
<th field="Birthday" width="80" align="right">Birthday</th> 
<th field="Nickname" width="200">Nickname</th> 
<th field="DBSTS" width="60" align="center">DBSTS</th> 
</tr> 
</thead> 
</table> 
</body> 
</html>

在来定义资料取得的后台介面
datagrid2_getdata.php
<?php 
$page = isset($_POST['page']) ? intval($_POST['page']) : 1; 
$rows = isset($_POST['rows']) ? intval($_POST['rows']) : 10; 
$offset = ($page-1)*$rows; 
$result = array(); $tablename = "STUser"; 
// ... 
require_once(".\db\DB_config.php"); 
require_once(".\db\DB_class.php"); 
$db = new DB(); 
$db->connect_db($_DB['host'], $_DB['username'], $_DB['password'], $_DB['dbname']); 
$db->query("select count(*) As Total from $tablename"); 
$row = $db->fetch_assoc(); 
$result["total"] = $row["Total"]; 
$db->query("select * from $tablename limit $offset,$rows"); 
$items = array(); 
while($row = $db->fetch_assoc()){ 
array_push($items, $row); 
} 
$result["rows"] = $items; 
echo json_encode($result); 
?>

由上述,可以看出,这是一个很单纯的资料取得的动作。
一开始 DataGrid 会传进来 两个参数,
$_POST['page']) 目前是在第几页
$_POST['rows']) 每页要显示几笔资料

然后,要使用一个阵列 $result ,存放两个资讯,
$result["total"] 有几笔资料
$result["rows"] 存放实际的资料阵列集
最后要将 $result 阵列,产生将 JSON 资料格式来输出,DataGrid 接收到以后就会来处理、刷新画面了。

后面,在更进一步,可以将 datagrid2_getdata.php 在抽象化一层,也就是将属于 EasyUI DataGrid 特有的资料格式处理的部分与资料库存取的的部分分离,各自独立出来成为 两个 class 来处理。

一个好的架构 以及 class 设计,其实都是靠经验的累积而生成的,不断演进改良,原有的框架,其中最重要的精神就是,每个 Class 的分工要清楚而且精确,这是为了应付上述,不断演进 这各问题来做的对应措施,这样在未来才更容易去做修改调整。

否则更容易变成,你想改却不知从何下手,因为一改就有几十支,甚至上百支程式等着你,要一起修改,从而延伸出,稳定性问题,也就是大家反对去修改原有系统,就是因为 太多要改了,少改一支也不行,问题几十支一起改,就算都改完,谁来测试有没有改好,难道叫你的 user 来帮你测,想想,就还是算了,不要再改了,反正现在系统也都还好好的可以用。

PHP 相关文章推荐
多文件上传的例子
Oct 09 PHP
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
PHP Google的translate API代码
Dec 10 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
浅谈json_encode用法
Mar 05 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP实现git部署的方法教程
Dec 19 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 #PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 #PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 #PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 #PHP
php动态实现表格跨行跨列实现代码
Nov 06 #PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 #PHP
php语言流程控制中的主动与被动
Nov 05 #PHP
You might like
destoon各类调用汇总
2014/06/20 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python自定义类并使用的方法
2015/05/07 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
Django使用rest_framework写出API
2020/05/21 Python
python def 定义函数,调用函数方式
2020/06/02 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
中餐厅主管的职责范文
2014/02/04 职场文书
老干部工作先进事迹
2014/08/17 职场文书
五年级小学生评语
2014/12/26 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
使用MybatisPlus打印sql语句
2022/04/22 SQL Server