帝国tag链接显示为ID连接方式
在使用帝国CMS的过程中,发现启用tag后,连接的地址中有中文,随即想到用tagid来作为访问地址,避免中文对收录的影响。
使用情况为设置cid为selfinfo的情况下,如果设定了cid,此方法无效。
即[showtags]'selfinfo',10,10,'tagid desc',0,'',' ',0,''[/showtags]
1、修改e\class\t_functions.php文件中sys_eShowTags函数
//显示TAGS
function sys_eShowTags($cid,$num=0,$line=0,$order='',$isgood='',$isgoodshow='',$showjg='',$shownum=0,$cs=''){
global $empire,$dbtbpre,$public_r,$navinfor;
$str='';
if(empty($showjg))
{
$showjg=' ';
}
$ln=0;
if($cid=='selfinfo')
{
if(empty($navinfor['infotags']))
{
return '';
}
$jg='';
$r=explode(',',$navinfor['infotags']);
$count=count($r);
for($i=0;$i<$count;$i++)
{
$sql=$empire->query("select tagid from {$dbtbpre}enewstags where tagname='".$r[$i]."'");
$rtagid=$empire->fetch($sql);
$ln++;
$br='';
if($line)
{
if($ln%$line==0)
{
$br='
';
}
}
$str.=$jg.''.$r[$i].''.$br;
//$str.=$jg.''.$r[$i].''.$br;
$jg=$br?'':$showjg;
}
}
else
{
$and='';
$where='';
if($cid)
{
$where=strstr($cid,',')?"cid in ($cid)":"cid='$cid'";
$and=' and ';
}
if($isgood)
{
$where.=$and.'isgood=1';
}
if($where)
{
$where=' where '.$where;
}
$order=$order?' '.$order:' tagid desc';
$limit='';
if($num)
{
$limit=' limit '.$num;
}
//推荐标红
$gfont1='';
$gfont2='';
if($isgoodshow)
{
if(strstr($isgoodshow,'r'))
{
$gfont1='';
$gfont2='';
}
if(strstr($isgoodshow,'s'))
{
$gfont1=$gfont1.'';
$gfont2=''.$gfont2;
}
}
$jg='';
$snum='';
$sql=$empire->query("select tagid,tagname,num,isgood from {$dbtbpre}enewstags".$where." order by".$order.$limit);
while($r=$empire->fetch($sql))
{
if($shownum)
{
$snum='('.$r[num].')';
}
$font1='';
$font2='';
if($isgoodshow&&$r[isgood])
{
$font1=$gfont1;
$font2=$gfont2;
}
$ln++;
$br='';
if($line)
{
if($ln%$line==0)
{
$br='
';
}
}
$str.=$jg.''.$font1.$r[tagname].$snum.$font2.''.$br;
$jg=$br?'':$showjg;
}
}
echo $str;
}
其实其中加入了三句代码,也可自行修改。
$sql=$empire->query("select tagid from {$dbtbpre}enewstags where tagname='".$r[$i]."'");
$rtagid=$empire->fetch($sql);
$str.=$jg.''.$r[$i].''.$br;
2、加入伪静态规则。
nginx下伪静态为
rewrite "^/tags\/([0-9]+)\.html$" /e/tags/?tagid=$1 last;
完成后又发现tag列表项过多时,会有导航栏,导航栏内的链接为动态形式,需要修改,方法如下。
1、修改e/tag/index.php
172行
$listpage=page1($num,$line,$page_line,$start,$page,$search);
改成
$listpage=pagetag($num,$line,$page_line,$start,$page,$tagid);
2、修改e/class/connect.php
复制一份函数function page1(),命名为function pagetag()
修改
function pagetag()函数如下
//TAGS分页
function pagetag($num,$line,$page_line,$start,$page,$tagid){
global $fun_r;
if($num<=$line)
{
return '';
}
$tagid='_'.$tagid;
$url='index';
$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;
}
3、nginx伪静态规则
rewrite "^/tags\/index\_([0-9]+)\_([0-9]+)\.html$" /e/tags/index.php?page=$2&tagid=$1&line=25&tempid=1 last;
备注:本来想采用输出的内容$returnstr,用正则替换的方法改变链接方式,结果发现无效果,屡试不成功,就放弃了,代码如下。
e/class/connect.php的pagetag函数中,最后一部分改成
$returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage;
$aaaaa='/e\/tags\/index\.php\?page\=([0-9]+)\&tagid\=([0-9]+)\&line\=25\&tempid\=1/';
$bbbbb='/tags/index_$2_$1.html';
$returnstr=preg_replace($aaaaa,$bbbbb,$returnstr);
return $returnstr;
实现转换成的模式为
tags/index_tagid_page.html
原连接模式为
/e/tags/index.php?page=1&tagid=2&line=25&tempid=1
转换伪静态
rewrite "^/tags\/index\_([0-9]+)\_([0-9]+)\.html$" /e/tags/index.php?page=$2&tagid=$1&line=25&tempid=1 last;
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。