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 相关文章推荐
php桌面中心(二) 数据库写入
Mar 11 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 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
php命名空间学习详解
2014/02/27 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
php实现可逆加密的方法
2015/08/11 PHP
将查询条件的input、select清空
2014/01/14 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
在vue组件中使用axios的方法
2018/03/16 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
python实现在pickling的时候压缩的方法
2014/09/25 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
详解Python正则表达式re模块
2019/03/19 Python
基于python调用psutil模块过程解析
2019/12/20 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
Python如何进行时间处理
2020/08/06 Python
为什么使用接口?
2014/08/13 面试题
纬创Java面试题笔试题
2014/10/02 面试题
学历公证委托书
2014/04/09 职场文书
中学生演讲稿
2014/04/26 职场文书
食堂标语大全
2014/06/11 职场文书
小学优秀学生评语
2014/12/29 职场文书
委托书的样本
2015/01/28 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
公司保密管理制度
2015/08/04 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP