欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

帝国cms筛选

程序员文章站 2024-03-18 20:16:34
...

一:首先把这个代码复制到e/class/userfun.php   里面去:

<?php

//---------------------------用户自定义标签函数文件

//显示结合项筛选选项

function user_ShowFieldandChange($val,$fieldandvar,$fieldandcss,$changefieldandcss,$fieldexp,$valexp,$val3,$ecms=0){

global $public_r,$navclassid;

$fieldandval=$val;

$fieldandvart=$fieldandvar;

$fieldandvar=str_replace('#',',',$fieldandvar);

//附加参数

$urlcs='';

$mid=(int)$_GET['mid'];

if($mid)

{

$urlcs.='&mid='.$mid;

}

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);

//上下级

$frt=explode(',',$fieldandvart);

$ftcount=count($frt);

//输出选项

$fr=explode(',',$fieldandvar);

$fcount=count($fr);

$allstr='';

foreach ($_GET as $key=>$val){                if($val && in_array($key, $fr)){                        $url_this=$key.'='.urlencode($val);                        $url=str_replace($url_this,'',$_SERVER[REQUEST_URI]);                        $tj='已选择条件:';                        $yixuan.='<a class="del_jhx" href="'.$url.'">'.$val.'x</a> ';                                }        }        echo $tj.$yixuan;

$urladd='';

for($i=0;$i<$fcount;$i++)

{   $nofield="";

$field=$fr[$i];

for($ti=0;$ti<$ftcount;$ti++)

   { 

$frtval=explode('#',$frt[$ti]);

if($field==$frtval[0]){$nofield="&".$frtval[1]."=";}

}

//选项链接

$getval='';

if($_GET[$field])

{

$getval=htmlspecialchars($_GET[$field],ENT_QUOTES);

$urladd.='&'.$field.'='.urlencode($getval);

}

//选项说明

$vsayr=explode('|==|',$fieldandval[$field]);

//选项内容

$valallstr='';

$vr=explode('|',$vsayr[1]);

$vcount=count($vr);

for($vi=0;$vi<$vcount;$vi++)

{

$vtr=explode(',',$vr[$vi]);

if($getval==$vtr[1])

{

$css=$changefieldandcss;

}

else

{

$css=$fieldandcss;

}

$valallstr.=$valexpr[0].'<a href="/e/action/ListInfo.php?'.$urlcs.'&ph=1<!--url.add-->&'.$field.'='.urlencode($vtr[1]).$nofield.'" class="'.$css.'">'.$vtr[0].'</a>'.$valexpr[1];

}

//自定义样式 实现二级自定义样式

if($val3[$field]!="")

{

$fieldexpr2=explode('|',$val3[$field]);

$allstr[$i]=$fieldexpr2[0].$vsayr[0].$valallstr.$fieldexpr2[1];

}

else

{

$allstr[$i]=$fieldexpr[0].$vsayr[0].$valallstr.$fieldexpr[1];

}

//清空没有数据的行

if($vcount==1){$allstr[$i]="";}

}

$allstr=str_replace('<!--url.add-->',$urladd,$allstr);

return $allstr;

}

?>

二:然后把这个代码放到模板里面
<?php 

        $GET=$_GET;

    //------- 函数参数设置开始 -----

  

    //要显示的结合项字段列表,多个字段用半角逗号“,”隔开 如果是二级关系用 “#”

    $fieldandvar='quyu,ftitle,jiage';

    //正常链接样式

    $fieldandcss='fieldandcss';

    //已选的选项链接样式

    $changefieldandcss='changefieldandcss';

  

    //字段与字段的显示间隔符,格式:开始显示字符|结束显示字符

    $fieldexp='<table><tr><td>|</td></tr></table>';

  

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

    $valexp='| ';

  

    //字段显示选项设置,多项用“|”号隔开,格式:选项说明|==|内容1,值1|内容2,值2

        $val=array();

    $val2=array();

    $val3=array();

    $val['quyu']='<b>区域:</b>|==|老城,老区|新区,新区';

    $val['ftitle']='<b>户型:</b>|==|三室一厅,三室一厅|三室两厅,三室两厅|两室一厅,两室一厅';

      

    $val['jiage']='<b>价格:</b>|==|50,50|40,40|30,30';

    $val3['jiage']='<div class="gzw">|</div>';

$val3['quyu']='<div class="gzw">|</div>';

$val3['ftitle']='<div class="gzw">|</div>';

      

    $g=user_ShowFieldandChange($val,$fieldandvar,$fieldandcss,$changefieldandcss,$fieldexp,$valexp,$val3);

?>

<?=$g[0]?>

<?=$g[1]?>

<?=$g[2]?>

<?=$g[3]?>

<?=$g[4]?>
注意:代码加入模板之后,应该取消勾选列表循环下面的--使用程序代码片,不然会报错


三:字段一定要跟自己后台的字段对应


四:这个的原理其实就是判断你这个字段里面是不是有这个文字,从而达到筛选的目的

帝国cms筛选
             这个是对应的样式,可以通过class进行样式控制

       帝国cms筛选
              这里是控制筛选的,效果如下
帝国cms筛选

如果要实现伪静态,使a链接与伪静态规则符合:更改userfun.php的for循环,更改如下:
for($i=0;$i<$fcount;$i++){
        $nofield="";
        $field=$fr[$i];
        for($ti=0;$ti<$ftcount;$ti++){
            $frtval=explode('#',$frt[$ti]);
            if($field==$frtval[0]){$nofield="&".$frtval[1]."=";}
        }
        //选项链接
        $f = array(
            'orderby'=> urlencode(htmlspecialchars($_GET['orderby'])),
            'zhuangtai'=> urlencode(htmlspecialchars($_GET['zhuangtai'])),
            'shouzhong'=> urlencode(htmlspecialchars($_GET['shouzhong'])),
            'diyu'=> urlencode(htmlspecialchars($_GET['diyu'])),
            'ticai'=> urlencode(htmlspecialchars($_GET['ticai'])),
        );
        $getval='';
        if($_GET[$field]){
            $getval=htmlspecialchars($_GET[$field],ENT_QUOTES);
            $urladd.='&'.$field.'='.urlencode($getval);
        }
        //选项说明
        $vsayr=explode('|==|',$fieldandval[$field]);
        //选项内容
        $valallstr='';
        $vr=explode('|',$vsayr[1]);
        $vcount=count($vr);
        for($vi=0;$vi<$vcount;$vi++)
        {
            $vtr=explode(',',$vr[$vi]);
            if($getval==$vtr[1])
            {
                $css=$changefieldandcss;
            }else{
                $css=$fieldandcss;
            }
            $f[$field] = $vtr[1];
            $valallstr.=$valexpr[0].'<a href="/'.$f['orderby'].'-'.$f['zhuangtai'].'-'.$f['shouzhong'].'-'.$f['diyu'].'-'.$f['ticai'].'.html" class="'.$css.'">'.$vtr[0].'</a>'.$valexpr[1];
        }



翻页伪静态:
上面的 $valallstr.应该改成   $valallstr.=$valexpr[0].'<a href="/'.$f['orderby'].'-'.$f['zhuangtai'].'-'.$f['shouzhong'].'-'.$f['diyu'].'-'.$f['ticai'].'-.html" class="'.$css.'">'.$vtr[0].'</a>'.$valexpr[1];  就是.html加-
然后在ListInfo.php里面找到
//分页
$listpage=page1($num,$line,$page_line,$start,$page,$search);
改成     $listpage=page5($num,$line,$page_line,$start,$page,$search);
然后在文件里面添加page5()方法,如下:
//分页函数
function page5($num,$line,$page_line,$start,$page,$search){
    global $fun_r;
    if($num<=$line)
    {
        return '';
    }
    $search=RepPostStr($search,1);
    //分割
    $sarr = explode('&amp;',$search);
    for($i=0;$i<count($sarr);$i++){
        $s = explode('=',$sarr[$i]);
        if($s[0]=='kj'){
            $wurl[0] = $s[1];
        }elseif($s[0]=='jb'){
            $wurl[1] = $s[1];
        }elseif($s[0]=='fg'){
            $wurl[2] = $s[1];
        }elseif($s[0]=='orderby'){
            $wurl[3] = $s[1];
        }
    }
$aaa=explode('=',$sarr[1]);
    if($aaa[1]=='102'||$aaa[1]=='103'){
        $isq = 1;
    }else{
        $isq = 0;
    }
    $wurl[3]="onclick";
    $wjurl =$wurl[0].'-'.$wurl[1].'-'.$wurl[2].'-'.$wurl[3];
    $url=eReturnSelfPage(0).'?page';
    $snum=2;
    $totalpage=ceil($num/$line);
    $firststr='<a title="'.$fun_r['trecord'].'">&nbsp;<b>'.$num.'</b> </a>&nbsp;&nbsp;';

    if($page<>0)
    {
        if($isq==0){
        $toppage='<a href="'.$url.'=0'.$search.'">'.$fun_r['startpage'].'</a>&nbsp;';
        $pagepr=$page-1;
        $prepage='<a href="'.$url.'='.$pagepr.$search.'">'.$fun_r['pripage'].'</a>';
        }else{
        $toppage='<a href="'.$wjurl.'-0.html">'.$fun_r['startpage'].'</a>&nbsp;';
        $pagepr=$page-1;
        $prepage='<a href="'.$wjurl.'-'.$pagepr.'.html">'.$fun_r['pripage'].'</a>';
        }
    }

    if($page!=$totalpage-1)
    {
        if($isq==0){
        $pagenex=$page+1;
        $nextpage='&nbsp;<a href="'.$url.'='.$pagenex.$search.'">'.$fun_r['nextpage'].'</a>';
        $lastpage='&nbsp;<a href="'.$url.'='.($totalpage-1).$search.'">'.$fun_r['lastpage'].'</a>';
        }else{
        $pagenex=$page+1;
        $nextpage='&nbsp;<a href="'.$wjurl.'-'.$pagenex.'.html">'.$fun_r['nextpage'].'</a>';
        $lastpage='&nbsp;<a href="'.$wjurl.'-'.($totalpage-1).'.html">'.$fun_r['lastpage'].'</a>';
        }
    }
    $starti=$page-$snum<0?0:$page-$snum;
    $no=0;
    for($i=$starti;$i<$totalpage&&$no<$page_line;$i++)
    {
        $no++;
        if($page==$i)
        {
            $is_1="<b>";
            $is_2="</b>";
        }
        else
        {
            if($isq==0){
            $is_1='<a href="'.$url.'='.$i.$search.'">';
            $is_2="</a>";
            }else{
            $is_1='<a href="'.$wjurl.'-'.$i.'.html">';
            $is_2="</a>";
            }
        }
        $pagenum=$i+1;
        $returnstr.="&nbsp;".$is_1.$pagenum.$is_2;
    }
    $returnstr=$toppage.$prepage.$returnstr.$nextpage.$lastpage;
    return $returnstr;
}

//注意,方法里面的字段名字要一一对应的

范围类筛选项伪静态,符号如"-"与伪静态冲突的时候,在ListInfo.php中做如下替换:
找到$andval=$_GET[$andr[$i]];
在下面加上:        if($andr[$i]=='mj')
            $andval = str_replace('_','-',$andval);