修改DedeCMS调用Tag标签中文名称改为数字Tag标签ID

织梦DedeCMS系统默认tag页面的链接地址是http://您的域名/tags.php?/tag名/这样的形式,而中文站的大多数tag名自然也是中文,这就会让地址栏的现实变得非常麻烦,因为中文在地址栏显示是会被url编码的,编码后会变得又臭又长…

把tag页面的链接改为数字id调取的方式会变得非常方便。dedecms调用tag由中文tag名改为数字tag id的方法,打开/include/taglib/tag.lib.php文件搜索下面代码行:

  1. $row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/";

把它修改为下面代码:

  1. $row['link'] = $cfg_cmsurl."/tags/".urlencode($row['id'])."/";

这样之后,tag的页面链接就被简化成了/tags.php?/1/的形式了,其中数字1代表当前tag的id。

这种目录式的连接形式对于SEO优化是有好处的,因为多数搜索引擎优化者认为目录本身的权重要高于html页面。不过,有的朋友担心物极必反,目录过多会被认为是过度优化,所以想改成以.html借位的方式。那么请继续往下看。

Tag标签静态化

dedecms调用tag由中文tag名改为数字tag id并且以.html结尾的方法:上面操作以后,打开/include/arc.taglist.clss.php查找下面语句:

  1. $this->TagInfos = $this->dsql->GetOne("Select * From `dede_tagindex` where tag like '{$this->Tag}' ");

将其修改为

  1. $this->TagInfos = $this->dsql->GetOne("Select * From `dede_tagindex` where id like '{$this->Tag}' ");

打开/include/arc.taglist.class.php查找下面语句

  1. foreach($GLOBALS['PubFields'] as $k=>$v) $this->Fields[$k] = $v;

在他下面添加以下代码

  1.     $s = $this->dsql->GetOne("Select tag From `dede_tagindex` where id = '{$this->Tag}' ");
  2.     $this->Fields['tag'] = $s['tag'];
  3.     $this->Fields['title'] = $s['tag'];

然后查找下面语句

  1. $this->TagInfos = $this->dsql->GetOne("Select * From `dede_tagindex` where tag like '{$this->Tag}' ");

把它改成以下代码

  1. $this->TagInfos = $this->dsql->GetOne("Select * From `dede_tagindex` where id like '{$this->Tag}' ");

到此这个文件改完了,保存一下。然后打开/include/helpers/archive.helper.php找到下面代码

  1.     $query = "SELECT tag FROM `dede_taglist` WHERE aid='$aid' ";
  2.     $dsql->Execute('tag',$query);
  3.     while($row = $dsql->GetArray('tag'))
  4.     {
  5.        $tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']);
  6.     }

把它改成

  1.     $query = "SELECT tid,tag FROM `dede_taglist` WHERE aid='$aid' ";
  2.     $dsql->Execute('tid',$query);
  3.     while($row = $dsql->GetArray('tid'))
  4.     {
  5.        $tags .= "<a href='".$GLOBALS['cfg_basehost']."/tags/".urlencode($row['tid'])."/'>".$row['tag']."</a>";
  6.     }

至此全部修改完成。

调用方式:

整站tag调用方法

  1.     {dede:tag row='30' sort='new' getall='1'}
  2.      <a target="_blank" href='link/]' rel="noopener noreferrer">[field:tag /]</a>
  3.     {/dede:tag}

参数说明

  1.     row:调用多少条
  2.     sort:排序方式 month,rand,week 分别为按月、随机。按周
  3.     getall:获取类型 0 为当前内容页TAG,1为获取全部TAG

内容页调用当前文章tag

  1.     {dede:tag row='5' sort='new' getall='0'}
  2.     <a target="_blank" href='link/]' rel="noopener noreferrer">[field:tag /]</a>
  3.     {/dede:tag}

首页和各种文章列表页调用文章对应的tag标签

  1.     {dede:arclist row='3' titlelen='60'}
  2.      <a target="_blank" href="link/]" rel="noopener noreferrer">[field:id function=GetTags(@me)/]</a>
  3.     {/dede:arclist}

经过修改以后就不能用{dede:field.title/}来调用标签名了,因为这样调取出来的会是tag的id,正确的调用方式是

  1. {dede:sql sql="select tag from dede_tagindex where id=~title~"}[field:tag/]{/dede:sql}

咨询客服

咨询客服

英文演示为原版演示地址,位于境外国内访问可能比较缓慢(建议爬梯浏览),你在本站所下载的主题等源码仅供测试学习之用,如果要商用请购买 正版授权,以便获得官方的更新和售后服务。

本站承接WordPress/织梦/帝国cms主题安装、深度汉化、加速优化等业务,详询在线客服!