<? 
/* 
smarttemplate模板的快速取值
结合smarttemplate使用，用r凼数和c凼数
r 凼数是 单列输出
c 凼数是 多列输出
//快速排表 
/* 
主要参数 
记得要找出必要的字段，不需要的，不要找，以加速程序运行 
cols 表格内有多少列，最少是1 如果用1 不如用r行凼数 
tabname 表名，如果同一个php里面，找同一个表两次，第二次要用 tabname1 不可以相同，这是唯一的标识，输出到html 
color1 color2 隔行背景色 
format_str 被格式化的字符串   要求格式   数据列名,,输出长度||       name,20||about,,50   返回一个 数据列名_all 的值是原值 
返回一个二数组，给SmartTemplate使用实现自动输出表格 
程序另外返回两个值i从0开始的下标 
index 从1开始的下标 
replace 替代需要的东西   要求格式   数据列名,,旧数据,,新数据,,如果最后的参数输入为1时，则完全替换       name,,old,,new,,1||about,,old,,new 
sql 找查据数的SQL 例 $sql="from product limit 0,20 ";   
sql_col ="id,name,pic,pics,about" 
sql语句，要分开写。select 不用写了 
*/ 
function c($sql,$cols,$tabname,$sql_col,$color1="",$color2="",$format_str="",$replace="") 
{ 
  //按输入生成新的sql 
  $HQL="select $col $sql"; 
  //如果format_str不为空，则返回一个二维数组，保存列名，和取多长串符 
  $str_arr=format($format_str); 
  //查询 
  $ph=mysql_query($HQL); 
  //如果替代replace不为空，则返回一个三维数组，保存列名，和旧字符，新字符 
  $rep_arr=replace($replace); 

  $i=0; 
  //如果多列，则生成多列 
  $tab=explode(",",$sql_col);   
  //生成临时二维数据，保存数据 
  while($row = mysql_fetch_array($ph)) 
  { 
  foreach($tab as $a) 
  { 
  $a=unline($a); 
    $show[$i]["$a"]=$row["$a"]; 
  } 
  $i++; 
  
  } 

  //取出多少行 
  $rows=Ceil($i/$cols); 
  $count=0; 
  //生成表格 
  for($row=0;$row<$rows;$row++) 
  { 
  //换行颜色 
  if($color1<>""){ 
  if($row%2==1) 
  { 
    $color=$color1; 
  }else{ 
    $color=$color2; 
  } 
  } 
  
  //生成td 
  for($col=0;$col<$cols;$col++) 
  { 
  //生成td里面的内容 
  foreach($tab as $a) 
  { 
  //去取内连接数据列的表名 
  $a=unline($a); 
  //替代指定字符 
  if($replace<>""){ 
      if($a==$rep_arr[$a]['name']) 
      {   
      $show[$count]["$a"]=str_replace($rep_arr[$a]['old'],$rep_arr[$a]['new'],$show[$count]["$a"]);   
      if($rep_arr[$a]['replace']==1){ 
      $show[$count]["$a"]=$rep_arr[$a]['new']; 
      } 
      } 
    } 
  //取部份字符串 
  if($format_str<>"") 
    { 
      if($a==$str_arr[$a]['name']) 
      {       
      $show[$i]["$a"]=lenlen($row["$a"],$str_arr[$a]['len']); 
      $table["r_".$tabname][$row]["c_".$tabname][$col]["$a"]=lenlen($show[$count]["$a"],$str_arr[$a]['len']); 
      $table["r_".$tabname][$row]["c_".$tabname][$col]["$a"."_all"]=$show[$count]["$a"]; 
      }else{ 
      
      $table["r_".$tabname][$row]["c_".$tabname][$col]["$a"]=$show[$count]["$a"]; 
      } 
    
    }else{ 
    $table["r_".$tabname][$row]["c_".$tabname][$col]["$a"]=$show[$count]["$a"]; 
    } 
  } 
  $table["r_".$tabname][$row]["c_".$tabname][$col]['color']=$color; 
  $table["r_".$tabname][$row]["c_".$tabname][$col]['i']=$count; 
  $table["r_".$tabname][$row]["c_".$tabname][$col]['index']=$count+1; 
  $count++; 
  } 
  } 
  return $table; 
} 
function r($sql,$tabname,$sql_col,$color1="",$color2="",$format_str="",$replace="") 
{ 
  $HQL="select $col $sql"; 
  $str_arr=format($format_str); 
  $ph=mysql_query($HQL); 
  $i=0; 
  $rep_arr=replace($replace); 
  $tab=explode(",",$sql_col); 
  
  while($row = mysql_fetch_array($ph)) 
  { 
  foreach($tab as $a) 
  { 
  $a=unline($a); 
  $show[$i]["$a"]=$row["$a"]; 
  } 
  $i++; 
  } 

  $count=0; 
  for($row=0;$row<$i;$row++) 
  { 
    if($color1<>""){ 
    if($row%2==1) 
    { 
    $color=$color1; 
    }else{ 
    $color=$color2; 
    } 
    } 
  foreach($tab as $a) 
  { 
    $a=unline($a);   
    if($replace<>""){ 
      if($a==$rep_arr[$a]['name']) 
      {   
      $show[$count]["$a"]=str_replace($rep_arr[$a]['old'],$rep_arr[$a]['new'],$show[$count]["$a"]); 
      if($rep_arr[$a]['replace']==1){ 
      if($show[$count]["$a"]==""){ 
        $show[$count]["$a"]=$rep_arr[$a]['new']; 
      } 
      } 
      } 
    } 
    if($format_str<>"") 
    {   
        if($a==$str_arr[$a]['name']) 
        {                       
        $show[$i]["$a"]=lenlen($row["$a"],$str_arr[$a]['len']); 
        $table["r_".$tabname][$row]["$a"]=lenlen($show[$count]["$a"],$str_arr[$a]['len']); 
        $table["r_".$tabname][$row]["$a"."_all"]=$show[$count]["$a"]; 
        }else{ 
        $table["r_".$tabname][$row]["$a"]=$show[$count]["$a"];   
        }   
      }else{ 
      $table["r_".$tabname][$row]["$a"]=$show[$count]["$a"];       
      } 
    } 
  $table["r_".$tabname][$row]['color']=$color; 
  $table["r_".$tabname][$row]['i']=$count; 
  $table["r_".$tabname][$row]['index']=$count+1; 
  $count++; 
  } 
  return $table; 
} 

//决解两表查找时，的列名显示
function unline($a)
{
if(strrpos($a,".")<>false)
{
$a=substr($a,strrpos($a,".")+1,strlen($a)-strrpos($a,".")+1);
}
return $a;
}
//程序内自动调用，
function format($format_str="")
{
  $arr=explode("||",$format_str);
  
  foreach ($arr as $key => $value) {
  $str_arr[$key]=explode(",,",$value);
  }
  for($i=0;$i<count($arr);$i++)
  {
  $array[$str_arr[$i][0]]['name']=$str_arr[$i][0];
  $array[$str_arr[$i][0]]['len']=$str_arr[$i][1];
  }
return $array;
}
//程序内自动调用，
function replace($format_str="")
{
  $arr=explode("||",$format_str);
  
  foreach ($arr as $key => $value) {
  $str_arr[$key]=explode(",,",$value);
  }
  for($i=0;$i<count($arr);$i++)
  {
  $array[$str_arr[$i][0]]['name']=$str_arr[$i][0];
  $array[$str_arr[$i][0]]['old']=$str_arr[$i][1];
  $array[$str_arr[$i][0]]['new']=$str_arr[$i][2];
  $array[$str_arr[$i][0]]['replace']=$str_arr[$i][3];
  }
return $array;
}
//截短字符串
function lenlen($str,$len){
  if($len<=0){
    return false;
  }
  else{
    $sLen=strlen($str);
    if($len>=$sLen)
        return $str;
    else{
        for($i=0;$i<($len-1);$i++){
          if(ord(substr($str,$i,1))>0xa0)
            $i++;
        }
        if($i>=$len)
          return substr($str,0,$len)."...";
        elseif(ord(substr($str,$i,1))>0xa0)
          return substr($str,0,$len-1)."...";
        else
          return substr($str,0,$len);
    }
  }
}
?> 