📄 head_func.php
字号:
<?php###################################################### Editor by Shuweich## Date 2005.10.17## Modify by Shuweich## Date 2005.10.17#### Modify by Shuweich## Date 2005.10.21## 增加表达式求值 expr and func 两种方式并用#### Modify by Shuweich## Date 2005.10.24## 增加支持多条SQL语句查询功能(将 $que 改为数组)#### Modify by Shuweich## Date 2005.10.27## 改进合计方式,以配合多条SQL语句的执行#### 数据源:从MySQL数据库中提取## 列示数据到HTML表格中<table>#### 本函数支持表达式求值#################################################### 函数说明## $que 数据查询语句## $que : 2005.10.24 开始支持数组## $lk MySQL数据库线程名## $title库表头文字(可以加入HTML语句)## $tabHead 表头栏位名称(二维数组) 形如:## $tabHead = array## (## 0 =>array('name' =>'序 号','attr' =>'','w' =>42,'size' =>14,'sum' =>0,'expr' =>'$row[0] * $row[5] - $row[7]'),## 1 =>array('name' =>'金额','attr' =>'','w' =>64,'size' =>14,'sum' =>1,'expr' =>'$row[2] + $row[4]')## );## 数组定义说明:## 必选部分## 'name' =>'序号','attr' =>'align="center"','w' =>4,'sum' =>0,## 栏位名 属性(字段值显示水平位置) 宽度值 本列求和否 0 不求和 1求和## ;属性一般用来定义字段值显示的水平位置,也可加入其它属性#### 可选部分## 'size' =>14 (暂未启用)## 字体大小 默认值 14px## 'expr' =>'if (!empty($row[6])) $out=$row[6]*100; else $out=$row[5]*100;'## 表达式求值## 'func' =>'if (!empty($row[6])) $out=$row[6]*100; else $out=$row[5]*100;'## 表达式求值2## expr 与 func 的区别: expr 不遍历 $row[]数组 , func 遍历 $row[]数组## 注:表达式后的分号“;”不能省略!#### 'roundec' =>2## 四舍五入小数位数, 若此值存在,则对合计进行按小数位(roundec)的四舍五入处理## 技巧:## 可利用 func 遍历字段值数组 $row[] 的不同之处重定义字段($row[])的显示顺序## 如每次都在某 func 中写入 $out=$row[5] , 以强制某栏位使用 $row[5] 的字段值## 因PHP的特性,数组定义中,可实现参数顺序无关性的特点## 数组定义说明完毕## $Other 其它变量集 形如: val1=2&val2=3&val3=4&val4=金额小计## fieldcolor 特殊显示时使用的颜色 缺省 : #00ca20## fieldcno 不同颜色显示使用第n个字段进行判断 缺省 : 4## fieldwhere 判断特殊显示时采用的条件 缺省 : 1 { 0.不参与 1.( > 0 );2.( == 0 );3.( < 0 ) }## tabattrib 表格属性 被插入到 <table > 标记中## thattrib 表头HTML公用属性 被插入到 <th > 标记中## tdattrib 表体HTML公用属性 被插入到每个 <td > 标记中## rowno 是否加序号在表格中 缺省值 : 0 { 0 不加序号 1 增加序号 }## sumres 是否加合计栏在表格中 缺省值 : 1 { 0 不加合计 1 增加合计 }## 2005.10.27 增加求合计的方式:## sumres = (## 1:每条SQL语句后合计,每for($que)循环合计不清零,此值在单条SQL语句时效果一样## 多条SQL语句效果是显示每条SQL的结果合计为累进值## 2:每条SQL语句后合计,每for($que)循环合计清零,此值在单条SQL语句时效果一样## 多条SQL语句效果为显示合计不累加前一SQL语句的结果## 3:只显示一个合计,此值为多条SQL语句后的合计值,此值在单条SQL语句时效果一样## 4:合并了 2 和 3 的功能 即小计与合计并存## )## 注:序号字段 rowno 总是被忽略## 字段值数组 $row[] 的顺序按 sql 语句中字段的顺序从 0 算起function DispData($que,$title,$tabHead,$Other,$_ZY) { global $xoopsDB; parse_str($Other); if (! isset($fieldcolor)) $fieldcolor='#00ca20'; if (! isset($fieldcno)) $fieldcno=4; if (! isset($fieldwhere)) $fieldwhere=1; if (! isset($tabattrib)) $tabattrib="border='1' cellspacing='0' cellpadding='1'"; if (! isset($thattrib)) $thattrib = ''; if (! isset($tdattrib)) $tdattrib = ''; if (! isset($rowno)) $rowno='0'; if (! isset($sumres)) $sumres='1'; $sum_w = 0; for ($i=0 ; $i<count($tabHead) ; $i++) { $sum_w += $tabHead[$i][w]; } $sum_w += $i+2; echo "<div aligh='center'>\n"; echo "<table id='t01' style='"; ## echo "border-collapse:separate;"; echo "width:".$sum_w."px;"; echo "font-size:14px;' "; echo " bordercolor='#111111' cellspacing='0' cellpadding='1' "; echo " border='0'>"; echo "<tbody>\n"; echo "<tr><td>\n"; echo "<table style='font-size:14px;' id='t02' cellspacing='0' cellpadding='1'"; echo " style='width:".$sum_w."px;'"; echo " align='center' summary='' border='0'>"; echo "<tbody>\n"; echo "<tr>\n"; if ( $rowno == '1' ) $csp=count($tabHead)+3; else $csp=count($tabHead)+2; echo "<td align='middle' bgcolor='#000080' colspan='".$csp."'>"; echo "<font color='#ffffff'>".$title."</font></td></tr>"; echo "<tr>\n"; $thattrib='bgColor="#6c95d0"'; ## 表头 Begin if ( $rowno == '1' ) echo "<th style='width:32px; '".$thattrib.">序号</th>\n"; for ($i=0 ; $i<count($tabHead) ; $i++) { echo "<th style='width:".$tabHead[$i][w]."px;'"; echo $thattrib.$tabHead[$i][attr].">".$tabHead[$i][name]."</th>\n"; } echo "<th style='width:26px' ".$thattrib."> </th>\n"; echo "</tr></tbody></table>\n"; echo "</td></tr>\n"; ## 表头 End echo "<tr>\n<td>\n"; ## 滚动表体定义 Begin echo "<div style='overflow:auto; width:100%;height:500px;'>\n"; echo "<table id='t03' style='font-size:14px;' "; echo " bordercolor='#aaaaaa' "; echo " width='98%' height='45' cellspacing='0' cellpadding='1' >\n"; $recordNo=1; ## 初始化各字段合计变量 for ($z=0 ; $z<count($tabHead) ; $z++) { $fieldsumName = "fieldsum".$z; $$fieldsumName = 0; } for ($sql_n=0; $sql_n<count($que); $sql_n++) { $res=$xoopsDB->query($que[$sql_n]); if ( $recordNo % 5 != 1 ) echo "<tbody>\n"; ## 是否每 for($que) 时合计清零 if ( $sumres == '2' || $sumres == '4' ) { for ($z=0 ; $z<count($tabHead) ; $z++) { $fieldsumName = "fieldsum".$z; $$fieldsumName = 0; } } while( $row=$xoopsDB->fetchrow($res) ) { ## 整行记录文字的着色处理 Begin $cval = false; if ( $fieldwhere == '0' ) $cval=false; if ( $fieldwhere == '1' ) if ( $row[$fieldcno] > 0 ) $cval=true; if ( $fieldwhere == '2' ) if ( $row[$fieldcno] == 0 ) $cval=true; if ( $fieldwhere == '3' ) if ( $row[$fieldcno] < 0 ) $cval=true; if ( $cval ) { $cgreentr = 'color: #0000ff; '; } else { $cgreentr = 'color: #000000; '; } ## 整行记录文字的着色处理 End ## 整行记录背景的着色处理 Begin if ( $recordNo % 3 == 0 ) $coStyle=" style='background-color: #f0ffc9;".$cgreentr." ' "; if ( $recordNo % 3 == 1 ) $coStyle=" style='background-color: #eeefff;".$cgreentr." ' "; if ( $recordNo % 3 == 2 ) $coStyle=" style='background-color: #ffffff;".$cgreentr." ' "; ## 整行记录背景的着色处理 End if ( $recordNo % 5 == 1 ) echo "<tbody>\n"; echo "<tr ".$coStyle.">\n"; ## 是否加序号栏 if ( $rowno == '1' ) echo "<td style='width:28px;'>".$recordNo."</td>\n"; $r=0; ## 输出一条记录 Begin for ($j=0; $j<count($tabHead); $j++) { ## 赤字着色 Begin if ( $row[$j] < 0 ) $redword = ' style="color: #ff0000; " '; else $redword = ''; ## 赤字着色 End echo "<td style='width:".$tabHead[$j][w]."px;' "; echo $tabHead[$j][attr].$redword.">"; ## expr and func 表达式处理 Begin if (isset($tabHead[$j]['expr']) && substr($tabHead[$j]['expr'],0,1) != '#') { eval($tabHead[$j]['expr']); echo $out; } elseif (isset($tabHead[$j]['func']) && substr($tabHead[$j]['func'],0,1) != '#') { eval($tabHead[$j]['func']); echo $out; $r+=1; } else { $out=$row[$r]; echo $out; $r+=1; } ## expr and func 表达式处理 End echo "</td>\n"; ## 若此栏位要求汇总, 则累加之 if ( $tabHead[$j][sum] == 1 ) { $fieldsumName = "fieldsum".$j; $$fieldsumName += $out; } } ## 输出一条记录 End ++$recordNo; echo "</tr>\n"; if ( $recordNo % 5 == 1 ) echo "</tbody>\n"; } ## 查询语句 while $res -> $row 循环结束 if ( $recordNo % 5 != 1 ) echo "</tbody>\n"; $cgreentr = 'color: #002f30; '; $coStyle=" style='background-color: #d6d6d6;".$cgreentr." ' "; echo "<tbody><tr ".$coStyle.">\n"; ## if 合计 Begin if ( $sumres == '1' || $sumres == '2' || $sumres == '4' ) { ## 序号 if ( $rowno == '1' ) echo "<td style='width:28px;'>".$recordNo."</td>\n"; ## 序号 End ## for 合计 Begin for ($i=0 ; $i<count($tabHead) ; $i++) { echo "<td style='width:".$tabHead[$i][w]."px;'"; echo $tabHead[$i][attr].">"; if ( $i == 0 ) { if ( $sumres == '2' || $sumres == '4' ) echo "小计:"; else echo "合计:"; } ## 某栏合计 Begin if ( $tabHead[$i][sum] == 1 ) { $fieldsumName = "fieldsum".$i; $outsum=$$fieldsumName; if ( isset($tabHead[$i][roundec]) ) $outsum=round($$fieldsumName,$tabHead[$i][roundec]); echo $outsum; } else { echo " "; } ## if 谋栏合计 End echo "</td>\n"; } ## for 合计 End echo "</tr></tbody>\n"; } ## if 合计 End ## 加计汇总 Begin if ( $sumres == '4' || $sumres == '3' ) { for ( $z=0 ; $z<count($tabHead) ; $z++ ) { if ( $tabHead[$z][sum] == 1 ) { $countSum = "cntName".$z; $fieldsumName = "fieldsum".$z; $$countSum += $$fieldsumName; } } } ## if 加计汇总 End } ## sql_n for 循环结束 处理多条 SQL 的循环 ## if 尾合计 Begin if ( $sumres == '3' || $sumres == '4' ) { ## 序号 $cgreentr = 'color: #000000; '; $coStyle=" style='background-color: #6c95d4;".$cgreentr." ' "; echo "<tbody><tr ".$coStyle.">\n"; $recordNo++; if ( $rowno == '1' ) echo "<td style='width:28px;'>".$recordNo."</td>\n"; ## 序号 End ## for 尾合计 Begin for ($i=0 ; $i<count($tabHead) ; $i++) { echo "<td style='width:".$tabHead[$i][w]."px;'"; echo $tabHead[$i][attr].">"; if ( $i == 0 ) echo "总计:"; ## 某栏合计 Begin if ( $tabHead[$i][sum] == 1 ) { $countSum = "cntName".$i; $outsum=$$countSum; if ( isset($tabHead[$i][roundec]) ) $outsum=round($$countSum,$tabHead[$i][roundec]); echo $outsum; } else { echo " "; } ## if 谋栏合计 End echo "</td>\n"; } ## for 尾合计 End echo "</tr></tbody>\n"; } ## if 尾合计 End echo "</table>\n"; echo "</div>\n"; ## 滚动表体定义 End echo "</td></tr>\n"; echo "</tbody></table>\n"; echo "</div>\n";} ## function End?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -