帝国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]?>
注意:代码加入模板之后,应该取消勾选列表循环下面的--使用程序代码片,不然会报错三:字段一定要跟自己后台的字段对应
四:这个的原理其实就是判断你这个字段里面是不是有这个文字,从而达到筛选的目的
这个是对应的样式,可以通过class进行样式控制
这里是控制筛选的,效果如下
如果要实现伪静态,使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('&',$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'].'"> <b>'.$num.'</b> </a> ';
if($page<>0)
{
if($isq==0){
$toppage='<a href="'.$url.'=0'.$search.'">'.$fun_r['startpage'].'</a> ';
$pagepr=$page-1;
$prepage='<a href="'.$url.'='.$pagepr.$search.'">'.$fun_r['pripage'].'</a>';
}else{
$toppage='<a href="'.$wjurl.'-0.html">'.$fun_r['startpage'].'</a> ';
$pagepr=$page-1;
$prepage='<a href="'.$wjurl.'-'.$pagepr.'.html">'.$fun_r['pripage'].'</a>';
}
}
if($page!=$totalpage-1)
{
if($isq==0){
$pagenex=$page+1;
$nextpage=' <a href="'.$url.'='.$pagenex.$search.'">'.$fun_r['nextpage'].'</a>';
$lastpage=' <a href="'.$url.'='.($totalpage-1).$search.'">'.$fun_r['lastpage'].'</a>';
}else{
$pagenex=$page+1;
$nextpage=' <a href="'.$wjurl.'-'.$pagenex.'.html">'.$fun_r['nextpage'].'</a>';
$lastpage=' <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.=" ".$is_1.$pagenum.$is_2;
}
$returnstr=$toppage.$prepage.$returnstr.$nextpage.$lastpage;
return $returnstr;
}
function page5($num,$line,$page_line,$start,$page,$search){
global $fun_r;
if($num<=$line)
{
return '';
}
$search=RepPostStr($search,1);
//分割
$sarr = explode('&',$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'].'"> <b>'.$num.'</b> </a> ';
if($page<>0)
{
if($isq==0){
$toppage='<a href="'.$url.'=0'.$search.'">'.$fun_r['startpage'].'</a> ';
$pagepr=$page-1;
$prepage='<a href="'.$url.'='.$pagepr.$search.'">'.$fun_r['pripage'].'</a>';
}else{
$toppage='<a href="'.$wjurl.'-0.html">'.$fun_r['startpage'].'</a> ';
$pagepr=$page-1;
$prepage='<a href="'.$wjurl.'-'.$pagepr.'.html">'.$fun_r['pripage'].'</a>';
}
}
if($page!=$totalpage-1)
{
if($isq==0){
$pagenex=$page+1;
$nextpage=' <a href="'.$url.'='.$pagenex.$search.'">'.$fun_r['nextpage'].'</a>';
$lastpage=' <a href="'.$url.'='.($totalpage-1).$search.'">'.$fun_r['lastpage'].'</a>';
}else{
$pagenex=$page+1;
$nextpage=' <a href="'.$wjurl.'-'.$pagenex.'.html">'.$fun_r['nextpage'].'</a>';
$lastpage=' <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.=" ".$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);
$andval = str_replace('_','-',$andval);