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 "<label class='flag flag".$flag."'></label>"; } 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 = "<a href='order_edit.php?id={$id}' class='edit'>查看</a>"; if(intval($_SESSION['level'])===10){ $r.=" <a href='order_del.php?id={$id}' class='edit'>删除</a>"; } 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代码部分
<table cellpadding="3" cellspacing="0" style="width:<?php echo $table_width;?>px;min-width:100%;"> <thead> <tr> <?php foreach($tablecol as $k=>$v){ echo "<th width='{$v[2]}'>{$v[1]}</th>"; } ?> </tr> </thead> <tbody> <?php foreach($data as $k=>$v){?> <tr class='list'> <?php $content=""; foreach($tablecol as $a=>$b){ $content = F("_$a",$v[$b[0]]); echo "<td align='center'>{$content}</td>"; } ?> </tr> <?php }?> </tbody> <tfoot> <tr> <?php $colcount = count($tablecol); echo "<td colspan='{$colcount}' style='padding-left:30px;'>{$fenye}</td>"; ?> </tr> </tfoot> </table>