admin 发表于 2014-2-28 14:13:51

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

修正版官方结合项函数,主要是去掉选项字段名重复在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为空的问题。




//显示结合项筛选项-官方结合项插件优化版:
function user_ShowFieldandChange($ecms=0){
global $public_r,$navclassid;//************解决官方结合项插件静态页classid为空
//global $public_r;
//------- 函数参数设置开始 -----
//要显示的结合项字段列表,多个字段用半角逗号“,”隔开
$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='| ';
//------- 函数参数设置结束 -----
//附加参数
$urlcs='';
$mid=(int)$_GET['mid'];
if($mid){
$urlcs.='&mid='.$mid;
}
//************解决官方结合项插件静态页classid为空
if($_GET['classid']){
$classid=RepPostVar($_GET['classid']);
$urlcs.='&classid='.$classid;
}else{
$urlcs.='&classid='.$navclassid;
}
//************
if($_GET['ttid'])
{
$ttid=RepPostVar($_GET['ttid']);
$urlcs.='&ttid='.$ttid;
}
if($_GET['ztid']){
$ztid=RepPostVar($_GET['ztid']);
$urlcs.='&ztid='.$ztid;
}
if($_GET['endtime']){
$starttime=RepPostVar($_GET['starttime']);
$endtime=RepPostVar($_GET['endtime']);
$urlcs.='&starttime='.$starttime.'&endtime='.$endtime;
}
$line=(int)$_GET['line'];
if($line){
$urlcs.='&line='.$line;
}
$tempid=(int)$_GET['tempid'];
if($tempid){
$urlcs.='&tempid='.$tempid;
}
if($_GET['orderby']){
$orderby=RepPostVar($_GET['orderby']);
$myorder=(int)$_GET['myorder'];
$urlcs.='&orderby='.$orderby.'&myorder='.$myorder;
}
//间隔字符
$fieldexpr=explode('|',$fieldexp);
$valexpr=explode('|',$valexp);
//输出选项
$fr=explode(',',$fieldandvar);
$fcount=count($fr);
$allstr='';
$urladd='';
for($i=0;$i<$fcount;$i++){
$urladd=''; //重新赋值
$getval2='';
$field=$fr[$i];
//选项链接
for($fi=0;$fi<$fcount;$fi++){ //循环字段 获得get值
$field2=$fr[$fi];
$getval='';
if($_GET[$field2]){
if($field2<>$fr[$i]) { //不查询本次循环字段 目的是为了后面输出时增加本次循环字段的属性链接 获得本字段筛选基准链接
$getval=htmlspecialchars($_GET[$field2],ENT_QUOTES);
$urladd.='&'.$field2.'='.urlencode($getval);
}
}
if($_GET[$field]){//得到字段选项的值 后面CSS用的 说明是被选属性
$getval2=htmlspecialchars($_GET[$field],ENT_QUOTES);
}
}//循环字段over
//选项说明
$vsayr=explode('|==|',$fieldandval[$field]);
//选项内容
$valallstr='';
$vr=explode('##',$vsayr);
$vcount=count($vr);
for($vi=0;$vi<$vcount;$vi++){
$vtr=explode(',',$vr[$vi]);
if($getval2==$vtr){
$css=$changefieldandcss;
}else{
$css=$fieldandcss;
}
$valallstr.=$valexpr.'<a href="'.$public_r['newsurl'].'e/action/ListInfo.php?'.$urlcs.'&ph=1'.$urladd.'&'.$field.'='.urlencode($vtr).'" class="'.$css.'">'.$vtr.'</a>'.$valexpr;
}
$allstr.=$fieldexpr.$vsayr.$valallstr.$fieldexpr;
}
//$allstr=str_replace('<!--url.add-->',$urladd,$allstr);
echo $allstr;
}


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



394814839 发表于 2018-10-24 14:12:38

不错,试用下
页: [1]
查看完整版本: 帝国CMS结合项列表属性筛选显示(优化修正版)