方法一,织梦默认有这个函数,在include/inc/inc_fun_funAdmin.php中.即SpGetPinyin()
但他只能得到全拼,没法得到首字母,
用法举例
[html]view plaincopy
print?
1. $pingyin=GetPinyin($row['title'],0,1);
2. $a=substr(GetPinyin($row['title']),0,1);//得到拼音首字母
方法二,如果你只想得到首字母,不需要全拼,还可以用以下函数得到首字母
[php]view plaincopy
print?
1. if (ord($row['title'])>128) { //汉字开头
2.
3. $letter=getfirstchar2($row['title']);
4.
5. }elseif(ord($row['title'])>=48 and ord($row['title'])<=57){ //数字开头
6.
7. $letter=iconv_substr($title,0,1,'utf-8');
8.
9. }elseif(ord($row['title'])>=65 and ord($row['title'])<=90){ //大写英文开头
10.
11. $letter=iconv_substr($row['title'],0,1,'utf-8');
12.
13.
14. }elseif(ord($row['title'])>=97 and ord($row['title'])<=122){ //小写英文开头
15.
16. $letter=iconv_substr($row['title'],0,1,'utf-8');
17. $letter=strtoupper($letter);//字母转换成大写
18. }
19.
20. print_r($letter);exit;
21. function getfirstchar2($s0){
22. $s=iconv("UTF-8","gb2312", $s0);
23. $asc=ord($s{0})*256+ord($s{1})-65536;
24. if($asc>=-20319 and$asc<=-20284)return"A";
25. if($asc>=-20283 and$asc<=-19776)return"B";
26. if($asc>=-19775 and$asc<=-19219)return"C";
27. if($asc>=-19218 and$asc<=-18711)return"D";
28. if($asc>=-18710 and$asc<=-18527)return"E";
29. if($asc>=-18526 and$asc<=-18240)return"F";
30. if($asc>=-18239 and$asc<=-17923)return"G";
31. if($asc>=-17922 and$asc<=-17418)return"H";
32. if($asc>=-17417 and$asc<=-16475)return"J";
33. if($asc>=-16474 and$asc<=-16213)return"K";
34. if($asc>=-16212 and$asc<=-15641)return"L";
35. if($asc>=-15640 and$asc<=-15166)return"M";
36. if($asc>=-15165 and$asc<=-14923)return"N";
37. if($asc>=-14922 and$asc<=-14915)return"O";
38. if($asc>=-14914 and$asc<=-14631)return"P";
39. if($asc>=-14630 and$asc<=-14150)return"Q";
40. if($asc>=-14149 and$asc<=-14091)return"R";
41. if($asc>=-14090 and$asc<=-13319)return"S";
42. if($asc>=-13318 and$asc<=-12839)return"T";
43. if($asc>=-12838 and$asc<=-12557)return"W";
44. if($asc>=-12556 and$asc<=-11848)return"X";
45. if($asc>=-11847 and$asc<=-11056)return"Y";
46. if($asc>=-11055 and$asc<=-10247)return"Z";
47. return false;
48. }
三,如何实现文章列表中,按首字母进行归类归档排序?下面是完整代码
[html]view plaincopy
print?
1. <divclass="container padding-big"style="min-height:200px;">
2. <pclass="text-large">{dede:type }[field:typename/]{/dede:type}</p>
3. <divclass="line-big">
4. {dede:php}
5. $sql = "select arc.id,arc.writer,arc.typeid, arc.title, arc.senddate,tp.sitepath,tp.namerule,tp.typedir from dede_archives arc left join `#@__arctype` tp on arc.typeid=tp.id where arc.typeid=2";
6. $dsql->SetQuery($sql);
7. $dsql->Execute();//执行SQL操作
8. while($row = $dsql->GetArray()){
9. //print_r($row['title']);exit;
10. //$pingyin=GetPinyin($row['title'],0,1);
11. $letter=substr(GetPinyin($row['title']),0,1);//取得拼音首字母
12. $letter=strtoupper($letter);
13.
14. $arr[$letter]['writer'][]=$row["writer"];
15. $arr[$letter]['url'][]=GetFileUrl($row['id'],$row['typeid'],$row['senddate'],$row['title'],0,0,$row['namerule'],$row['typedir'],0, '',0,'',$row['sitepath']);
16. $arr[$letter]['title'][]=$row["title"];
17. }
18. ksort($arr);//字母排序
19. //print_r($arr);exit;
20. $b=1;
21. foreach($arr as $k=>$v){
22.
23. //print_r($v);exit;
24. echo '<divclass="x3"><pclass="padding-left bg-eee st">'.strtoupper($k).'</p>';
25. for ($x=0; $x<count($v['title']); $x++) {
26. echo '<ahref="'.$v[url][$x].'"><strong>'. $v[title][$x].'</strong></a><br/><hr/>';
27.
28. }
29. echo '<br/></div>';// print_r($b%4);
30. if($b%3==0){echo '<hrclass="space"></hr>';//hr{background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:1px;margin:10px 0;border:none;-moz-box-sizing:content-box;box-sizing:content-box;}hr.space{background:#fff;color:#fff;visibility:hidden;}hr的css,强制换行,防止错位
31. }
32. $b++;
33. }
34. {/dede:php}
35. </div>
36. </div>
发表评论 取消回复