帝国cms结合项nginx伪静态规则及帝国cms7.2 nginx伪静态

以上是最终实现效果

以下是动态地址的重写(nginx)

在数据表模型建立字段时候要用:值==名称的形式。不要用0,0留着给不限使用

如:

1==白色2==黑色3==红色4==灰色5==黄色6==蓝色7==绿色8==咖啡9==其它

代码如下:

1.userfun.php 将此代码放到e/class/userfun.php

2.注意修改字段 $fieldandvar='cailiao,xilie,ytu,yanse';

3.注意修改前台显示项目为你的$fieldandval

4.已选样式为你的$changefieldandcss='act';

5.模版开始结束标记为你的 $fieldexp='|

'; 6.分页部分也可以修改为你的

7.需要注意伪静态规则中

$url_zuhe='/dalishi/'.$classid.'-'.$url_zdzh.$page.'.html';

/dalishi/为你的地址必须与nginx的规则完全匹配否则会404

<?php//---------------------------用户自定义标签函数文件//显示结合项筛选选项functionuser_showfield($ecms=0) { global$public_r;//-------函数参数设置开始-----//要显示的结合项字段列表,多个字段用半角逗号“,”隔开$fieldandvar='cailiao,xilie,ytu,yanse';//字段显示选项设置,多项用双“#”号隔开,格式:选项说明|==|内容1,值1##内容2,值2$fieldandval=array();$fieldandval['cailiao']='材质:|==|##全部,0##花岗石,1##石灰石,2##大理石,3##石英岩,4##板岩,5##其它,6';$fieldandval['xilie']='系列:|==|##全部,0##珍贵系列,1##玉石系列,2##常规系列,3##人造石系列,4##其他系列,5';$fieldandval['ytu']='用途:|==|##全部,0##室内地面,1##室内墙面,2##室外地面,3##室外墙面,4##柱面,5##楼梯,6##台面板,7##洗手池,8##浴缸,9##壁炉,10##雕塑,11##其他,12';$fieldandval['yanse']='色系:|==|##全部,0##白色,1##黑色,2##红色,3##灰色,4##黄色,5##蓝色,6##绿色,7##咖啡,8##其它,9';//正常链接样式$fieldandcss='';//已选的选项链接样式$changefieldandcss='act';//字段与字段的显示间隔符,格式:开始显示字符|结束显示字符$fieldexp='|

';//选项与选项的显示间隔符,格式:开始显示字符|结束显示字符$valexp='|';//-------函数参数设置结束-----//间隔字符$fieldexpr=explode('|',$fieldexp);$valexpr=explode('|',$valexp);//输出选项$fr=explode(',',$fieldandvar);$fcount=count($fr);$allstr='';$urladd='';for($i=0;$i<$fcount;$i++){$field=$fr[$i];//选项链接$getval='0';if($_GET[$field]){$getval=htmlspecialchars($_GET[$field],ENT_QUOTES); }//选项说明$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; }$trueurl=$field.'|'.$vtr[1];$url=Return_Url($fr,$trueurl);$valallstr.=$valexpr[0].''.$vtr[0].''.$valexpr[1]; }$allstr.=$fieldexpr[0].$vsayr[0].$valallstr.$fieldexpr[1]; }

echo$allstr; }//结合项伪静态返回地址。functionReturn_Url($zd_arr,$trueurl) { global$classid,$page,$public_r;$url_zuhe='';if(strpos($_SERVER[REQUEST_URI],'.html')&&$_GET['ph']==1){$url_zuhe=$_SERVER[REQUEST_URI]; }

else { for($i=0;$i<count($zd_arr);$i++){$url_zdzh.='0-'; }$url_zuhe='/dalishi/'.$classid.'-'.$url_zdzh.$page.'.html'; }$ser_url=explode('-',$url_zuhe);$url_arr=explode('|',$trueurl);$ser_url[count($ser_url)-1]='0.html';//如果有分页的话,筛选后分页是0,免得不是第一页没数据显示if(is_array($zd_arr)) { foreach($zd_arras$key=>$val){if($url_arr[0]==$val){$ser_url[$key+1]=$url_arr[1];//因为有classis所有key要加1 }}}

foreach($ser_urlas$val) { $url.=$val.'-'; }

returnsubstr(substr($url,0,-1),1); }//结合项分页functionpage_sx($num,$line,$page_line,$start,$page,$search) { global$fun_r;if($num<=$line){return''; }$search=RepPostStr($search,1);$lj_arr=explode('-',$search);$lj_arr[count($lj_arr)-1]='';//去掉页数.htmlforeach($lj_arras$val) { $lianjie.=$val.'-'; }$lianjie=substr($lianjie,0,-1);$url=eReturnSelfPage(0).'?page';$snum=2;//最小页数$totalpage=ceil($num/$line);//取得总页数$firststr=' '.$num.' ';//上一页if($page<>0) { $toppage=''.$fun_r['startpage'].' ';$pagepr=$page-1;$prepage=''.$fun_r['pripage'].''; }//下一页if($page!=$totalpage-1) { $pagenex=$page+1;$nextpage=' '.$fun_r['nextpage'].'';$lastpage=' '.$fun_r['lastpage'].''; }$starti=$page-$snum<0?0:$page-$snum;$no=0;for($i=$starti;$i<$totalpage&&$no<$page_line;$i++) { $no++;if($page==$i){$is_1="";$is_2=""; }

else { $is_1='';$is_2=""; }$pagenum=$i+1;$returnstr.=" ".$is_1.$pagenum.$is_2; }$returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage;return$returnstr; }?>

需要在e/action/ListInfo.php加几行代码,判断伪静态使用分页函数的 找到$listpage=page1($num,$line,$page_line,$start,$page,$search); 在下面添加: //如果启用结合项并且伪静态的分页 if($_GET['ph']==1&&strpos($_SERVER['REQUEST_URI'],'.html')) { $listpage=page_sx($num,$line,$page_line,$start,$page,$_SERVER[REQUEST_URI]); }

在需要显示的列表栏目模版加: 这样才会被显示出来

栏目的设置为动态栏目如:

结合项伪静态规则如下:

if($args~"^(.*)$") { set$rule_01$rule_0; }

if($rule_0="1") { rewrite^/showinfo-(.+?)-(.+?)-(.+?).html$/e/action/ShowInfo.php?classid=$1&id=$2&page=$3; }

if($args~"^(.*)$") { set$rule_11$rule_1; }

if($rule_1="1") { rewrite^/listinfo-(.+?)-(.+?).html$/e/action/ListInfo/index.php?classid=$1&page=$2; }

if($args~"^(.*)$") { set$rule_21$rule_2; }

if($rule_2="1") { rewrite^/infotype-(.+?)-(.+?).html$/e/action/InfoType/index.php?ttid=$1&page=$2; }

if($args~"^(.*)$") { set$rule_31$rule_3; }

if($rule_3="1") { rewrite^/tags-(.+?)-(.+?).html$/e/tags/index.php?tagname=$1&page=$2; }

if($args~"^(.*)$") { set$rule_41$rule_4; }

if($rule_4="1") { rewrite^dalishi/14-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+).html$/e/action/ListInfo.php?classid=14&ph=1&cailiao=$1&xilie=$2&ytu=$3&yanse=$4&page=$5last; }

最后一句为结合项的伪静态规则

需要注意伪静态规则中

/dalishi/为你的地址必须与$url_zuhe内设置的地址完全匹配否则会404

另外

/14为你的栏目id如果不匹配也是打不开的必须一致

classid=14同上必须匹配笔者就是犯了这个错误最后检查数遍才知道是粗心

仅以此文献给有同样需求的同学。

文章参考内容源自http://bbs.phome.net/showthread-31-293567-0.html