PHP实现表格Table动态显示MySQL数据库列(字段)
在原生PHP开发中,有权限控制的地方基本都会有权限不同表格数据显示不同列的问题,如果一个个去IF那是比较麻烦而且费神的一件事。PHP和HTML混编会产生大量的代码冗余导致检查费事麻烦。这里我的一个客户就要求用原生PHP写项目不能用任何框架,没办法涉及到权限控制那只能自己想办法了。
下面是我的实现过程,有相同需要的朋友可以参考下。
完整PHP代码部分//表格显示方法集合
function F($func,$pm){
global $func_arr;
if(function_exists($func)){
return call_user_func($func,$pm);
}else{
return $pm;
}
}
//----表格列格式化函数
function _fenlei($fenlei){
global $__fenlei;
return $__fenlei[$fenlei];
}
function _jindu($jindu){
global $__jindu;
return $__jindu[$jindu];
}
function _leixing($leixing){
global $__leixing;
return $__leixing[$leixing];
}
function _qepayed($qepayed){
global $__qepayed;
return $__qepayed[$qepayed];
}
function _downloaded($downloaded){
global $__downloaded;
return $__downloaded[$downloaded];
}
function _flag($flag){
return "";
}
function _time_order($time_order){
if(intval($time_order)<1){return '';}
return date('Y-m-d',$time_order);
}
function _time_jiankan($time_jiankan){
if(intval($time_jiankan)<1){return '';}
return date('Y-m-d',$time_jiankan);
}
function _banshu($banshu){
return intval($banshu)===0?'':$banshu;
}
function _edit($id){
$r = "查看";
if(intval($_SESSION['level'])===10){
$r.=" 删除";
}
return $r;
}
//----列格式化函数
//默认要显示的列
$tablecol = array(
//函数名参数名、表头、宽度
'id'=>array('id','编号','70'),
'edit'=>array('id','修改','100'),
'flag'=>array('flag','标记','40'),
'fenlei'=>array('fenlei','分类','120'),
'time_order'=>array('time_order','接单时间','100'),
'jindu'=>array('jindu','进度','60'),
'leixing'=>array('leixing','类型','60'),
'lirun'=>array('lirun','利润','80'),
'zonge'=>array('zonge','总额','80'),
'payed'=>array('payed','已付款','80'),
'qepayed'=>array('qepayed','是否全额付款','100'),
'qqweixin'=>array('qqweixin','客户QQ或微信','150'),
'wangwang'=>array('wangwang','客户旺旺','120'),
'xieshou'=>array('xieshou','写手信息','100'),
'qikan'=>array('qikan','发表期刊','120'),
'timu'=>array('timu','题目','400'),
'banshu'=>array('banshu','版数','70'),
'time_jiankan'=>array('time_jiankan','见刊时间','100'),
'zuozhe'=>array('zuozhe','作者','100'),
'zhubian'=>array('zhubian','主编信息','100'),
//函数名可以随意起,所以可以做到不重复,参数名可能需要多次引用故不能做key
);
if($ulevel===0){
//角色1
$tablecol = array(
//函数名参数名、表头、宽度
'id'=>array('id','编号','70'),
'edit'=>array('id','修改','100'),
'flag'=>array('flag','标记','40'),
'time_order'=>array('time_order','提交时间','100'),
'xieshou'=>array('xieshou','写手昵称','100'),
'timu'=>array('timu','题目','400'),
'downloaded'=>array('downloaded','是否下载','80'),
);
}elseif($ulevel===1){
//角色2
$tablecol = array(
//函数名参数名、表头、宽度
'id'=>array('id','编号','70'),
'edit'=>array('id','修改','100'),
'flag'=>array('flag','标记','40'),
'fenlei'=>array('fenlei','分类','120'),
'time_order'=>array('time_order','接单时间','100'),
'jindu'=>array('jindu','进度','60'),
'leixing'=>array('leixing','类型','60'),
'lirun'=>array('lirun','利润','80'),
'zonge'=>array('zonge','总额','80'),
'payed'=>array('payed','已付款','80'),
'qepayed'=>array('qepayed','是否全额付款','100'),
'qqweixin'=>array('qqweixin','客户QQ或微信','150'),
'wangwang'=>array('wangwang','客户旺旺','120'),
'timu'=>array('timu','题目','400'),
'xieshou'=>array('xieshou','写手信息','100'),
);
}elseif($ulevel===2){
//角色3
$tablecol = array(
//函数名参数名、表头、宽度
'id'=>array('id','编号','70'),
'edit'=>array('id','修改','100'),
'flag'=>array('flag','标记','40'),
'fenlei'=>array('fenlei','分类','120'),
'time_order'=>array('time_order','接单时间','100'),
'jindu'=>array('jindu','进度','60'),
'leixing'=>array('leixing','类型','60'),
'lirun'=>array('lirun','利润','80'),
'zonge'=>array('zonge','总额','80'),
'payed'=>array('payed','已付款','80'),
'qepayed'=>array('qepayed','是否全额付款','100'),
'qqweixin'=>array('qqweixin','客户QQ或微信','150'),
'wangwang'=>array('wangwang','客户旺旺','120'),
'xieshou'=>array('xieshou','写手信息','100'),
'qikan'=>array('qikan','发表期刊','120'),
'timu'=>array('timu','题目','400'),
'banshu'=>array('banshu','版数','70'),
'time_jiankan'=>array('time_jiankan','见刊时间','100'),
'zuozhe'=>array('zuozhe','作者','100'),
'zhubian'=>array('zhubian','主编信息','100'),
);
}
$table_width = 0;
foreach($tablecol as $a=>$b){
$table_width+=intval($b[2]);
}
完整HTML代码部分
foreach($tablecol as $k=>$v){
echo "
{$v[1]}";}
?>
<?php foreach($data as $k=>$v){?>
$content="";
foreach($tablecol as $a=>$b){
$content = F("_$a",$v[$b[0]]);
echo "
{$content}";}
?>
$colcount = count($tablecol);
echo "
{$fenye}";?>