设为首页收藏本站

PHPIN.NET

 找回密码
 立即注册
查看: 2875|回复: 0

[7.X版] 帝国CMS结合项列表属性筛选显示(优化修正版)

[复制链接]

374

主题

381

帖子

2554

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2554
发表于 2014-2-28 14:13:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
修正版官方结合项函数,主要是去掉选项字段名重复在URL地址出现

效果就是 如果字段属性已经被选择
再去选择改字段属性
URL地址连接官方会出现 比如 myarea=东城%myarea=朝阳  
本方法 URL去掉官方多余的 属性值 只显示后面的 比如 myarea=朝阳

效果预览图

效果预览图


和官方写的方法不同
官方的是  获得当前选项字段值连接起来,
最后输出时,全部替换增加链接到每个属性链接地址上,
所以如果连续点同一字段的2个属性值的话 ,字段会重复出现在URL里
比如 myarea=东城%myarea=朝阳 和myarea=朝阳 都是 朝阳的列表内容
正常情况下 连续点同一字段值,应该只会是 一个字段 比如就是 myarea=朝阳
get取得后 会覆盖前面东城,对筛选结果是没有影响的
但是感觉 对搜索引擎不友好 多个地址对应一样的内容了。
我就改为 只取得其它字段的被选择属性值 链接当前字段属性值     这样就避免了重复输出一样的字段在URL上。
把上面代码替换掉官方的userfun.php 内 就可以
或者重新命名函数名
在模板调用这个函数名




********************     插件使用     ********************

1、插件参数配置可修改 /e/class/userfun.php 文件中user_ShowFieldandChange函数的以下配置:(推荐用Dreamweaver或Editplus等编辑工具修改)
    ---------------------------
        //------- 函数参数设置开始 -----

        //要显示的结合项字段列表,多个字段用半角逗号“,”隔开
        $fieldandvar='myarea,sex,age';

        //字段显示选项设置,多项用双“#”号隔开,格式:选项说明|==|内容1,值1##内容2,值2
        $fieldandval=array();
        $fieldandval['myarea']='<b>地区:</b>|==|不限,##东城,东城区##朝阳,朝阳区##崇文,崇文区##宣武,宣武区##海淀,海淀区##丰台,丰台区';
        $fieldandval['sex']='<b>性别:</b>|==|不限,##男,男##女,女##人妖,人妖';
        $fieldandval['age']='<b>年龄:</b>|==|不限,##1-10,1__10##11-20,11__20##21-30,21__30##31-40,31__40##41-50,41__50##50岁以上,51__200';

        //正常链接样式
        $fieldandcss='fieldandcss';

        //已选的选项链接样式
        $changefieldandcss='changefieldandcss';

        //字段与字段的显示间隔符,格式:开始显示字符|结束显示字符
        $fieldexp='<table><tr><td>|</td></tr></table>';

        //选项与选项的显示间隔符,格式:开始显示字符|结束显示字符
        $valexp='| ';

        //------- 函数参数设置结束 -----
    ---------------------------

2、修改模板,在要结合项属性筛选的地方加上如下代码:
    <?=user_ShowFieldandChange()?>

3、CSS文件里定义:(定义正常链接样式和已选链接样式)
    ---------------------------
   .fieldandcss{}
   .changefieldandcss{background:#4598D2;color:#fff;}
    ---------------------------

4、更新相应页面。


(其他说明:如果要用多种导航,可以复制一份函数内容,然后改函数名,调用用新的函数名。
   结合项使用教程可查看:http://www.phpin.net/ecms/doc/manual/editor/html/fieldand.html




另外解决官方结合项插件静态页classid为空的问题。




  1. //显示结合项筛选项-官方结合项插件优化版:
  2. function user_ShowFieldandChange($ecms=0){
  3. global $public_r,$navclassid;//************解决官方结合项插件静态页classid为空
  4. //global $public_r;
  5. //------- 函数参数设置开始 -----
  6. //要显示的结合项字段列表,多个字段用半角逗号“,”隔开
  7. $fieldandvar='myarea,sex,age';
  8. //字段显示选项设置,多项用双“#”号隔开,格式:选项说明|==|内容1,值1##内容2,值2
  9. $fieldandval=array();
  10. $fieldandval['myarea']='<b>地区:</b>|==|不限,##东城,东城区##朝阳,朝阳区##崇文,崇文区##宣武,宣武区##海淀,海淀区##丰台,丰台区';
  11. $fieldandval['sex']='<b>性别:</b>|==|不限,##男,男##女,女##人妖,人妖';
  12. $fieldandval['age']='<b>年龄:</b>|==|不限,##1-10,1__10##11-20,11__20##21-30,21__30##31-40,31__40##41-50,41__50##50岁以上,51__200';
  13. //正常链接样式
  14. $fieldandcss='fieldandcss';
  15. //已选的选项链接样式
  16. $changefieldandcss='changefieldandcss';
  17. //字段与字段的显示间隔符,格式:开始显示字符|结束显示字符
  18. $fieldexp='<table><tr><td>|</td></tr></table>';
  19. //选项与选项的显示间隔符,格式:开始显示字符|结束显示字符
  20. $valexp='| ';
  21. //------- 函数参数设置结束 -----
  22. //附加参数
  23. $urlcs='';
  24. $mid=(int)$_GET['mid'];
  25. if($mid){
  26. $urlcs.='&mid='.$mid;
  27. }
  28. //************解决官方结合项插件静态页classid为空
  29. if($_GET['classid']){
  30. $classid=RepPostVar($_GET['classid']);
  31. $urlcs.='&classid='.$classid;
  32. }else{
  33. $urlcs.='&classid='.$navclassid;
  34. }
  35. //************
  36. if($_GET['ttid'])
  37. {
  38. $ttid=RepPostVar($_GET['ttid']);
  39. $urlcs.='&ttid='.$ttid;
  40. }
  41. if($_GET['ztid']){
  42. $ztid=RepPostVar($_GET['ztid']);
  43. $urlcs.='&ztid='.$ztid;
  44. }
  45. if($_GET['endtime']){
  46. $starttime=RepPostVar($_GET['starttime']);
  47. $endtime=RepPostVar($_GET['endtime']);
  48. $urlcs.='&starttime='.$starttime.'&endtime='.$endtime;
  49. }
  50. $line=(int)$_GET['line'];
  51. if($line){
  52. $urlcs.='&line='.$line;
  53. }
  54. $tempid=(int)$_GET['tempid'];
  55. if($tempid){
  56. $urlcs.='&tempid='.$tempid;
  57. }
  58. if($_GET['orderby']){
  59. $orderby=RepPostVar($_GET['orderby']);
  60. $myorder=(int)$_GET['myorder'];
  61. $urlcs.='&orderby='.$orderby.'&myorder='.$myorder;
  62. }
  63. //间隔字符
  64. $fieldexpr=explode('|',$fieldexp);
  65. $valexpr=explode('|',$valexp);
  66. //输出选项
  67. $fr=explode(',',$fieldandvar);
  68. $fcount=count($fr);
  69. $allstr='';
  70. $urladd='';
  71. for($i=0;$i<$fcount;$i++){
  72. $urladd=''; //重新赋值
  73. $getval2='';
  74. $field=$fr[$i];
  75. //选项链接
  76. for($fi=0;$fi<$fcount;$fi++){ //循环字段 获得get值
  77. $field2=$fr[$fi];
  78. $getval='';
  79. if($_GET[$field2]){
  80. if($field2<>$fr[$i]) { //不查询本次循环字段 目的是为了后面输出时增加本次循环字段的属性链接 获得本字段筛选基准链接
  81. $getval=htmlspecialchars($_GET[$field2],ENT_QUOTES);
  82. $urladd.='&'.$field2.'='.urlencode($getval);
  83. }
  84. }
  85. if($_GET[$field]){//得到字段选项的值 后面CSS用的 说明是被选属性
  86. $getval2=htmlspecialchars($_GET[$field],ENT_QUOTES);
  87. }
  88. }//循环字段over
  89. //选项说明
  90. $vsayr=explode('|==|',$fieldandval[$field]);
  91. //选项内容
  92. $valallstr='';
  93. $vr=explode('##',$vsayr[1]);
  94. $vcount=count($vr);
  95. for($vi=0;$vi<$vcount;$vi++){
  96. $vtr=explode(',',$vr[$vi]);
  97. if($getval2==$vtr[1]){
  98. $css=$changefieldandcss;
  99. }else{
  100. $css=$fieldandcss;
  101. }
  102. $valallstr.=$valexpr[0].'<a href="'.$public_r['newsurl'].'e/action/ListInfo.php?'.$urlcs.'&ph=1'.$urladd.'&'.$field.'='.urlencode($vtr[1]).'" class="'.$css.'">'.$vtr[0].'</a>'.$valexpr[1];
  103. }
  104. $allstr.=$fieldexpr[0].$vsayr[0].$valallstr.$fieldexpr[1];
  105. }
  106. //$allstr=str_replace('<!--url.add-->',$urladd,$allstr);
  107. echo $allstr;
  108. }
复制代码



使用方法参考官方结合项说明,以下附件给出了结合项修改后的代码


fieldand.txt (3.59 KB, 下载次数: 13)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|PHPIN.NET ( 冀ICP备00000001号 )|网站地图  

GMT+8, 2016-12-3 12:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表