分类按照拼音第一字母排序显示实现

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家

最近一个项目客户要求按照品牌分类拼音第一个字母来分类显示 代码拿出来共享。我是菜鸟 有不足之处多多指教。功能效果类似http://www.officedepot.com.cn/buy/zhuanti/bj/pp.html

首先写一个提取品牌第一字母的函数 其实 这是最重要的
  1. $dict=array(

  2. 'a'=>0xB0C4,

  3. 'b'=>0xB2C0,

  4. 'c'=>0xB4ED,

  5. 'd'=>0xB6E9,

  6. 'e'=>0xB7A1,

  7. 'f'=>0xB8C0,

  8. 'g'=>0xB9FD,

  9. 'h'=>0xBBF6,

  10. 'j'=>0xBFA5,

  11. 'k'=>0xC0AB,

  12. 'l'=>0xC2E7,

  13. 'm'=>0xC4C2,

  14. 'n'=>0xC5B5,

  15. 'o'=>0xC5BD,

  16. 'p'=>0xC6D9,

  17. 'q'=>0xC8BA,

  18. 'r'=>0xC8F5,

  19. 's'=>0xCBF9,

  20. 't'=>0xCDD9,

  21. 'w'=>0xCEF3,

  22. 'x'=>0xD188,

  23. 'y'=>0xD4D0,

  24. 'z'=>0xD7F9,

  25. );

  26. //取GB2312字符串首字母,原理是GBK汉字是按拼音顺序编码的.

  27. function get_letter($input)

  28. {
  29. global $dict;

  30. $str_1 = substr($input, 0, 1);

  31. if ($str_1 >= chr(0x81) && $str_1 <= chr(0xfe)) {

  32. $num = hexdec(bin2hex(substr($input, 0, 2)));

  33. foreach ($dict as $k=>$v){

  34. if($v>=$num)

  35. break;

  36. }

  37. return $k;

  38. }

  39. else{

  40. return $str_1;

  41. }
  42. }
复制代码
第二步 结合我们的系统进行查询

  1. $sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('brand').' order by brand_name';
  2. $brand_array = $GLOBALS['db']->getall($sql);
  3. $brand_list = array();
  4. for($i=0;$i<count($brand_array);$i++)
  5. {
  6. $brand_list[get_letter($brand_array[$i]['brand_name'])][$brand_array[$i]['brand_id']] = $brand_array[$i]['brand_name']."-".$brand_array[$i]['brand_id'];

  7. }
  8. 得到一个以第一字母为主键的数组
复制代码
第三步 显示


  1. foreach ($brand_list AS $row=>$idx)
  2. {

  3. $show .="<table width=\"766\" height=\"103\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">
  4. <tr>
  5. <td align=\"center\" style=\"border-right:1px solid #D0DFE8;border-bottom:1px solid #D0DFE8;border-left:1px solid #D0DFE8\"><table width=\"97%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
  6. <tr>
  7. <td ><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
  8. <tr>
  9. <td width=\"90%\" style=\"font-size:18px\"><strong><font color=\"#DC0000\">".$row."</font><a name=".$row." id=".$row."></a></strong></td>
  10. <td style=\"font-size:14px\"><strong><a href=\"#top\" style=\"color: #0073CF;text-deocration:none\">Top</a></strong></td>
  11. </tr>
  12. </table></td>
  13. </tr>
  14. <tr>
  15. <td style=\"line-height:200%\">
  16. <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
  17. <tr>";
  18. $a = 0;
  19. foreach($idx AS $row2=>$idx2)
  20. {
  21. $a++;
  22. $idx2 = explode('-',$idx2);
  23. $show .= "<tdalign=\"left\"><span style=\"font-size:12px;\"><a href='brand.php?id=$idx2[1]' style=\"color:#00509f;text-decoration:none\">$idx2[0]</a></span></td>";
  24. if($a%6 == 0)
  25. {
  26. $show .="</tr><tr>";
  27. }
  28. }
  29. $show .="</tr>
  30. </table>
  31. </td>
  32. </tr>
  33. </table>
  34. </td>
  35. </tr>
  36. </table>";
  37. }
  38. $smarty->assign("show",$show);
复制代码
如果有人想要类似功能 按照我方法不能实现的免费提供服务 联系方式:西安php服务中心 qq:138918647

注:希封ID的人 看清帖子不要动不动就封别人的ID


回答:
恩,很精简

http://www.officedepot.com.cn/buy/zhuanti/bj/pp.html这个站 还可以是楼主做的吗?

偶这两天也帮人搞了一个办公用品的站.本是仿的这站.后来感觉难看.干脆用的官方默认模板
功能重新搞了搞

如果有这么多品牌,我倒是会直接用搜索……

这个怎么使用呢?修改或者放在哪个文件里啊?

你要根据ec重新建一个文件。然后还要有一个dwt文件

这里面几个功能都是我相要的

品牌分类 如果你懂技术的话 复制我上面就可以搞定的。第二个功能代码多些 没有发全哈。

楼主不错,公开技术.值得大家学习.....

原帖由 qiyongdong 于 2008-11-15 18:22 发表
根据客户需要 对每一个商品的价格都按照购物数量有促销 后台修改抓图:16926
前台显示效果 16927

前台根据商品购买数量 对价格换算程序lib_order.php 函数做修改/**
* 获得购物车中的商品
*
* @access pub ...



既然都发了,怎么又不发全呢? 希望LZ发挥一下你的共享精神

没关系的 那位朋友想要 我做免费指导就可以了 。代码有点点多 发上来也说不清楚哈