织梦TAGS标签静态化,相信很多朋友都需要这个功能,且都在网上了解过伪静态等,而本文主要讲解的是如果修改成静态的TAGS,而不是伪静态,资料均来自网上,且测试完毕,完全可以生成静态化标签,但是因为资料本身比较凌乱,所以在此整理下,方便自己也方便大家使用。(目前已经测试5.6和5.7版本,均可)
1:如果标签数量特别多,不建议使用。
2:如果网站数据特别庞大,同样不建议使用。
不建议使用的原因是因为数据太大,生成时间比较多(其实也就是几分钟而已,3万数据的站),每次更新都需生成一次,比较麻烦,不介意以上两点的朋友就继续往下看。
第一步:下载压缩包,压缩包含了UTF8和GBK两个版本,根据自己的需要进行操作,修改前,请备份相关的原始文件。
二、修改步骤:
1、在DEDE网站根目录,建立"tag"目录(小写)
2、在DEDE后台SQL运行器里,执行以下一条SQL:
ALTER TABLE `dede_tagindex` ADD `maketime` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0';
3、拷贝对应的文件到对应的目录中:
templets/default/list_tag.htm //可从文章底部获取
templets/default/index_tag.htm //可从文章底部获取
dede/makehtml_tag_action_list.php //可从文章底部获取
dede/makehtml_tag_action_index.php //可从文章底部获取
dede/makehtml_tag.php //可从文章底部获取
dede/templets/makehtml_tag.htm //可从文章底部获取
include/arc.taghtml.class.php //可从文章底部获取
4、修改后台菜单文件dede/inc/inc_menu.php 143行,插入:
5、修改相应文件,也可以直接用压缩包的对应文件进行覆盖
打开文件:include/taglib/tag.lib.php,找到代码,大概87行
$row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/";
替换为:
//$row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/"; //原DEDE代码,屏蔽
$row['link'] = nic_tag_url($row['id']); //新加代码,TAG静态化, by NIC
打开文件include/extend.func.php,在底部空白处增加代码,注意修改dede_为自己的前缀:
//获取TAG静态地址, by NIC
function nic_tag_url($tid)
{
global $dsql;
$sql = "select * from dede_tagindex where id='$tid' ";
if ($arcRow = $dsql->GetOne($sql)){
//$str = $GLOBALS['cfg_cmspath']."/tag/".ceil($tid/100)."/".Getpinyin($arcRow["tag"])."_".$tid."_1.html"; //目录结构为:每100个ID为一个目录,从 /tag/1/ 开始
$pinyin_title = GetPinyin(stripslashes($arcRow["tag"]));
$pinyin_title = str_replace("?","",$pinyin_title);
$pinyin_title = str_replace(":","",$pinyin_title);
$str = $GLOBALS['cfg_cmspath']."/tag/".$pinyin_title."_".$tid."_1.html"; //目录结构为:/tag/拼音_ID_1.html 开始
}else $str="ID为$tid的TAG已被删除!";
return $str;
}
//获取指定文章的TAG到相关TAG列表页的地址, by NIC
function nic_arc_tag_link($aid)
{
global $dsql;
$sql = "select tid from dede_taglist where aid='$aid' group by tid ";
$dsql->Execute('ala',$sql);
while($row=$dsql->GetObject('ala')){
$url=nic_tag_url($row->tid);
if ($arcRow = $dsql->GetOne("select * from dede_tagindex where id='".$row->tid."' ")) $tag=$arcRow["tag"];
else $tag="";
$str.=" ".$tag." ";
}
return $str;
}
三、使用说明:
1、进入后台"生成",即可看到左边的"更新TAG静态"(就在更新主页、栏目、文档等功能的下方)
2、自行编辑TAG列表页模板list_tag.htm、TAG首页模板index_tag.htm,都放在你站点模板所在目录即可(和首页模板、列表页模板、内容页模板等在一起)
3、生成有个选项"是否强制全部生成",它是为了节约资源设计的
如果是"重新生成全部TAG列表",它会更新所有的TAG的列表页;
如果是"仅更新上次生成后有变化的TAG",它则会只更新上次更新之后有变化及新增加的TAG的列表页,这个比较节约时间
4、生成的TAG首页,放在根目录,叫做tags.html
5、如果你的模板里,还有TAG需要指向到它的静态地址,则用参考这个函数去处理其标签即可:
{dede:tag type='current'}[field:id function="nic_tag_url(@me)" /]{/dede:tag}
其中的id就是这个TAG的ID号
在内容页如果想调用当前面页的URL,直接使用代码{dede:field.id function='nic_tag_url(@me)'/}
即可
6、在内容页模板,如果想指向该文TAG的列表页,用以下标签即可:
{dede:field.id function='nic_arc_tag_link(@me)'/}
在文章列表页、arclist标签等,使用一下代码调用文章TAG列表
[field:id function='nic_arc_tag_link(@me)'/]
高级补充说明:
1、TAG这个目录可以改,修改arc.taghtml.class.php的146行和extend.func.php的15行,里面的tag/字样
2、文件名里的id号不能去掉,举例说因为"作业"和"昨夜"的拼音都一样,如果没有ID,他们的文件名就重复了。
(如果非要去掉ID,请按如下步骤修改:如果某个TAG有超过一页以上,静态分页就会出问题
1:修改include/arc.taghtml.class.php,找到下面代码去掉 _".$this->Fields['id']."_".$this->PageNo."
$makeFile = $this->Fields['typedir']."/".$pinyin_title."_".$this->Fields['id']."_".$this->PageNo.".html";
2:打开include/extend.func.php,,找到下面代码去掉 _“.$tid.”_1
$str = $GLOBALS['cfg_cmspath']."/tag/".$pinyin_title."_".$tid."_1.html";
附:如果只需要去掉tag的tid数字,除此修改以上2点之外,以下代码需要修改一下(arc.taghtml.class.php中)
找到如下代码,去掉".$this->Fields[‘id’]."_
$tnamerule = $this->Fields['typedir']."/".Getpinyin($this->Fields['title'])."_".$this->Fields['id']."_{page}.html";
这里还一个小问题,如果用了翻页,生成的翻页代码和栏目的翻页代码顺序是不一致的,这使得需要重新设置CSS,所以请在该页面搜索$plist = “”;,然后把下面的代码更换顺序即可。
3、生成速度和普通列表页一致的,因为是从哪里修改过来的。 你有1万个TAG,假定你每个TAG对应有30个文章吧,列表页10篇为一页,那就有3万篇了。
你可以到后台的sql运行工具里,执行这一句看看,就知道TAG对应文章之后,数量就远大于TAG数量本身:
select count(*) as c from dede_taglist
4、如果需要在发布新文章的时候,同时更新相关的TAG列表页,可以参考附带的inc_archives_functions.php,修改你DEDE后台目录dede/inc/inc_archives_functions.php
找到最后的代码
$revalue = '';
}
return $revalue;
}
修改为
$revalue = '';
}
//add by nic
$sql="select tid from dede_taglist where aid=".$arcID;
$dsql->Execute('al',$sql);
while($row=$dsql->GetObject('al')){
$revalue .= "\r\n
";
}
$revalue .= "\r\n
";
//add by nic
return $revalue;
}
?>
文件代码下载地址:
https://wwn.lanzoul.com/iylcBia7puf