DEDECMS织梦实现tags标签不以中文字为url,以中文标签对应id为url并实现伪静态html。如:/tags/1-1.html
二次开发版本:DEDECMS V5.7 SP2版本
一、新旧tags对比
原来的:
/tags/词/1/
现在实现伪静态并将URL中中文词改为对应id:
/tags/1-1.html
1-1.html中第一个1对应中文tags词对应id,第二个1对应分页。
修改后伪静态后路径:
www.html8.com.cn/tags.html
www.html8.com.cn/tags/1-1.html
www.html8.com.cn/tags/1-2.html
其中1-1和1-2中前第一个1为tag标签词对应id地址
二、实现修改对应文件代码
1、更改include/arc.taglist.class.php 文件中的代码如下:
1-1、找到
$this->TagInfos = $this->dsql->GetOne("Select * From `dede_tagindex` where taglike '{$this->Tag}' ");
替换为:
$this->TagInfos = $this->dsql->GetOne("Select * From `dede_tagindex` where id like'{$this->Tag}' ");
注:代表从数据库中输出tag名字变更为输出tag的ID,即tags.php?/中文,变成tags.php?/id
1-2、找到(获取当前链接地址)
function GetCurUrl()
{
if(!empty($_SERVER["REQUEST_URI"]))
{
$nowurl = $_SERVER["REQUEST_URI"];
$nowurls = explode("?",$nowurl);
$nowurl = $nowurls[0];
}
else
{
$nowurl = $_SERVER["PHP_SELF"];
}
return $nowurl;
}
修改成
function GetCurUrl()
{
$nowurl = $_SERVER["PHP_SELF"];
$nowurl=str_replace(".php",'',$nowurl);
return $nowurl;
}
1-3、找到(修改连接地址路径1)
$plist = '';
if(preg_match('/info/i', $listitem))
{
$plist .= $maininfo.' ';
}
if(preg_match('/index/i', $listitem))
{
$plist .= $indexpage.' ';
}
if(preg_match('/pre/i', $listitem))
{
$plist .= $prepage.' ';
}
if(preg_match('/pageno/i', $listitem))
{
$plist .= $listdd.' ';
}
if(preg_match('/next/i', $listitem))
{
$plist .= $nextpage.' ';
}
if(preg_match('/end/i', $listitem))
{
$plist .= $endpage.' ';
}
return $plist;
改成
$plist = '';
if(eregi('info',$listitem))
{
$plist .= $maininfo.' ';
}
if(eregi('index',$listitem))
{
$plist .= $indexpage.' ';
}
if(eregi('pre',$listitem))
{
$plist .= $prepage.' ';
}
if(eregi('pageno',$listitem))
{
$plist .= $listdd.' ';
}
if(eregi('next',$listitem))
{
$plist .= $nextpage.' ';
}
if(eregi('end',$listitem))
{
$plist .= $endpage.' ';
}
return $plist;
1-4、找到(修改分页链接)
if($j == $this->PageNo)
{
$listdd.= "<li class=\"thisclass\"><a>$j</a></li>\r\n";
}
else
{
$listdd.="<li><a href='".$purl."/$j/'>".$j."</a></li>\r\n";
}
修改成
if($j == $this->PageNo)
{
$listdd.= " $j ";
}
else
{
$listdd.=" <a href='".$purl."-$j.html'>".$j."</a> ";
}
1-5、找到(修改分页 上一页 下一页路径)
if($this->PageNo != 1)
{
$prepage.="<li><a href='".$purl."/$prepagenum/'>上一页</a></li>\r\n";
$indexpage="<li><a href='".$purl."/1/'>首页</a></li>\r\n";
}
else
{
$indexpage="<li><a>首页</a></li>\r\n";
}
if($this->PageNo!=$totalpage && $totalpage>1)
{
$nextpage.="<li><a href='".$purl."/$nextpagenum/'>下一页</a></li>\r\n";
$endpage="<li><a href='".$purl."/$totalpage/'>末页</a></li>\r\n";
}
else
{
$endpage="<li><a>末页</a></li>\r\n";
}
修改成
if($this->PageNo != 1)
{
if($this->PageNo == 2){
$prepage.="<a href='".$purl."-1.html'>上一页</a>\r\n";
$indexpage="<a href='".$purl."-1.html'>首页</a>\r\n";
}
else{
$prepage.=" <a href='".$purl."-$prepagenum.html'>上一页</a> ";
$indexpage=" <a href='".$purl."-1.html'>首页</a> ";
}
}
else
{
$indexpage=" 首页 ";
}
if($this->PageNo!=$totalpage && $totalpage>1)
{
$nextpage.=" <a href='".$purl."-$nextpagenum.html'>下一页</a> ";
$endpage=" <a href='".$purl."-$totalpage.html'>末页</a> ";
}
else
{
$endpage="末页";
}
1-6、找到(修改 共几页 去掉class和html标签)
if($totalpage <= 1 && $this->TotalResult > 0)
{
return "<span class=\"pageinfo\">共1页/".$this->TotalResult."条</span>";
}
if($this->TotalResult == 0)
{
return "<span class=\"pageinfo\">共0页/".$this->TotalResult."条</span>";
}
$maininfo = "<span class=\"pageinfo\">共{$totalpage}页/".$this->TotalResult."条</span>\r\n";
$purl = $this->GetCurUrl();
$purl .= "?/".urlencode($this->Tag);
修改成
if($totalpage <= 1 && $this->TotalResult > 0)
{
return "共1页/".$this->TotalResult."";
}
if($this->TotalResult == 0)
{
return "共0页/".$this->TotalResult."";
}
$maininfo = "共{$totalpage}页/".$this->TotalResult."";
$purl = $this->GetCurUrl();
$purl .= rawurlencode($this->Tag);
1-7、注意修改生成分页地址错误修改,tag伪静态地址自带问号错误:
注意URL修改(实现 /tags/1-1.html)
$purl .= "?/".urlencode($this->Tag);
改成
$purl .= "/".urlencode($this->Tag);
特别修改如果想更改地址为/abc/tags/1-1.html
$purl = $this->GetCurUrl();
$purl .= rawurlencode($this->Tag);
修改为:
$purl = "/abc/tags/".urlencode($this->Tag);
2、更改include/taglib/tag.lib.php文件
2-1、更改tag为id的地方如下
找到
$row['keyword'] = $row['tag'];
将更改为
$row['keyword'] = $row['id'];
2-2、找到
$row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/";
更改为:
$row['link'] = $cfg_cmsurl."/tags/".urlencode($row['id'])."-1.html";
注:第一行代表将tag的名字变为tag的id,第二行代表将tags.php?/+tag关键字变更为tags格式+tag的id
3、找到文件templets/default/taglist.htm
3-1、我的位置代码
<strong>当前位置:</strong>:<a href="{dede:global.cfg_cmsurl/}/">主页</a> > <a href='tags.php'>TAG标签</a> > {dede:field.title /}
修改为:
<strong>当前位置:</strong>:<a href="{dede:global.cfg_cmsurl/}/">主页</a> >
<a href='/tags.html'>TAG标签</a> > {dede:sql sql="select tag from abcxxx_tagindex where id=~title~"}[field:tag/]{/dede:sql}
3-2、title网页标题
<title>{dede:field.title/}_{dede:global.cfg_webname/}</title>
修改为:
<title>{dede:sql sql="select tag from abcxxx_tagindex where id=~title~"}[field:tag/]{/dede:sql}_{dede:global.cfg_webname/}</title>
三、文章页调用
{dede:tag sort='new' getall='0'} <a href='[field:link/]'>[field:tag /]</a> {/dede:tag}
四、伪静态
1、nginx伪静态规则
rewrite ^(.*)/tags.html $1/tags.php;
rewrite ^(.*)/tags/(.*)-1.html $1/tags.php?/$2/$3;
或
rewrite ^([^\.]*)/tags.html $1/tags.php;
rewrite ^([^\.]*)/tags/(.*)-([0-9]+).html $1/tags.php?/$2/$3;
2、.htaccess文件伪静态规则
RewriteBase /
RewriteRule ^tags\.html$ /tags.php$1
RewriteRule ^tags/(.*)-([0-9]+).html$ /tags.php?/$1/$2
3、IIS下web.config文件,伪静态规则:
<rule name="Imported Rule tags 1">
<match url="^(.*/)*tags.html$" ignoreCase="false" />
<action type="Rewrite" url="{R:1}/tags.php" />
</rule>
<rule name="Imported Rule tags 2">
<match url="^(.*/)*tags/([^-]+)-([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="{R:1}/tags.php\?/{R:2}/{R:3}" appendQueryString="false" />
</rule>
4、httpd.ini 文件伪静态规则
RewriteRule ^(.*)/tags\.html $1/tags\.php
RewriteRule ^(.*)/tags/(.*)-([0-9]+).html $1/tags\.php\?$2/$3
以上为完美解决dedecms tags标签伪静态,并且以tags关键词对应id作为url路径。
说明上面abcxxx修改成你的数据库表前缀。