DedeCMS織夢TAG的URL替換成ID[織夢網(wǎng)站模板使用教程]

閱讀 ?·? 發(fā)布日期 2019-05-27 08:19 ?·? admin

 DedeCMS織夢TAG的URL替換成ID[織夢網(wǎng)站模板使用教程]DedeCMS V5.7中的TAG標簽的URL一般是

http://域名/tags.php?/%B0%D9%B6%C8%BF%EC%D5%D5/

       做成TAG偽靜態(tài)修改參考文章《DedeCMS實現(xiàn)TAG偽靜態(tài)(萬網(wǎng)虛擬主機)》,中文字符的URL一樣能被百度和谷歌識別,但介于中文URL路徑過長可以替換為該TAG的ID。

打開/include/taglib/tag.lib.php

        在差不多87行找到

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

       將其改成

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

       這樣就把每個動態(tài)的tag標簽生成了如:

http://域名/tags/12/

       很多人設計TAG標簽URL后面有“.html的”后綴,其實直接用斜杠“/”更好,代表這是一個目錄。

打開/include/arc.taglist.clss.php,找到(下面出現(xiàn)的分隔符請去掉)

$this->TagInfos = $this->dsql->GetOne("Select * From `#分隔符@__tagindex` where tag like '{$this->Tag}' ");

       修改為

$this->TagInfos = $this->dsql->GetOne("Select * From `#分隔符@__tagindex` where id like '{$this->Tag}' ");

       由于TAG替換成了ID,原有的調用方法有些變化,訪問的tag列表如果用{dede:field.title/}調用的是ID,這不友好,下面是修改及調用方法

打開/include/arc.taglist.class.php,找到

//設置一些全局參數(shù)的值
foreach($GLOBALS['PubFields'] as $k=>$v) $this->Fields[$k] = $v;

       下面增加

//by vi586.com
$s = $this->dsql->GetOne("Select tag From `#分隔符@__tagindex` where id = '{$this->Tag}' ");
$this->Fields['tag'] = $s['tag'];
$this->Fields['title'] = $s['tag'];
//end

       往下繼續(xù)找到

$this->TagInfos = $this->dsql->GetOne("Select * From `#分隔符@__tagindex` where tag like '{$this->Tag}' ");

       修改為

$this->TagInfos = $this->dsql->GetOne("Select * From `#分隔符@__tagindex` where id like '{$this->Tag}' ");

       一般在站內都是用GetTags()函數(shù)調用,但這個函數(shù)并沒有對應的ID。查看了一下taglist表,發(fā)現(xiàn)用的是tid。

[field:id function=GetTags(@me)/],調出來的會是/tags//

打開/include/helpers/archive.helper.php,找到

$query = "SELECT tag FROM `#分隔符@__taglist` WHERE aid='$aid' ";
$dsql->Execute('tag',$query);
while($row = $dsql->GetArray('tag'))
{
   $tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']);
}

       這里增加了絕對路徑的修改。

$query = "SELECT tid,tag FROM `#分隔符@__taglist` WHERE aid='$aid' ";
$dsql->Execute('tid',$query);
while($row = $dsql->GetArray('tid'))
{
   $tags .= "<a href='".$GLOBALS['cfg_basehost']."/tags/".urlencode($row['tid'])."/'>".$row['tag']."</a>";
}

調用全站TAG標簽帶鏈接

{dede:tag row='100' sort='new' getall='1'}
 <a target="_blank" href='[field:link/]'>[field:tag /]</a>
{/dede:tag}

       有幾個參數(shù)需要了解

row:調用條數(shù)
sort:排序方式 month,rand,week
getall:獲取類型 0 為當前內容頁TAG標記,1為獲取全部TAG標記

調用當前內容頁TAG標簽帶鏈接

{dede:tag row='10' sort='new' getall='0'}
<a target="_blank" href='[field:link/]'>[field:tag /]</a>
{/dede:tag}

首頁、列表頁調用文章TAG標簽帶鏈接

{dede:arclist row='10' titlelen='80'}
 <a target="_blank" href="[field:link/]">[field:id function=GetTags(@me)/]</a>
{/dede:arclist}

       TAG列表頁也是用的上述方法。

TAG詳情頁調用TAG標簽

       不能直接用{dede:field.title/}調用TAG標簽了,這時調出來的是該TAG的ID,需要用SQL的方法調用,下面的橙色表前綴請自行更換。

{dede:sql sql="select tag from #分隔符@__tagindex where id=~title~"}[field:tag/]{/dede:sql}

擴展閱讀:

1:dedecms織夢tag標簽實現(xiàn)偽靜態(tài)的方法

2:DedeCms織夢tag標簽靜態(tài)生成+url拼音+分頁優(yōu)化(支持手機版tag自動生成)