简要:
1.执行sql语句
ALTER TABLE `dede_tagindex` ADD `maketime` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0';
2.替换文件,提前备份
3.修改tag长度问题
ALTER TABLE `dede_tagindex` CHANGE `tag` `tag` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
ALTER TABLE `dede_taglist` CHANGE `tag` `tag` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
执行完SQL命令以后,再到源文件当中修改/include/helpers/archive.helper.php路径文件中的参数。
按快捷键CTRL+F查找:if(isset($tag[12]) 和 if(isset($tag[20])
然后再修改替换成:if(isset($tag[255]) ||
$tag!=stripslashes($tag))
4.修改tag首页,列表页
5.给本站head,foot加上热门标签,给文章页加上热门标签组;
6.全部生成;
**内容页随机调用标签组
{dede:tag row='40' sort='rand' getall='1'}
<a href="[field:link/]">[field:tag /]</a></li>
{/dede:tag}
**内容页调用本页标签
{dede:tag type='current'/}
**手机端内容页调用本页标签
{dede:field.id runphp='yes'}
global $cfg_cmspath;
$tags = GetTags(@me);
$revalue = '';
$tags = explode(',', $tags);
foreach($tags as $key => $value){
if($value){
$revalue .= '<a href="'.$cfg_cmspath.'/tags.php?/'.$value.'/">'.$value.'</a>, ';
}
}
@me = $revalue;
{/dede:field.id}
织梦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 //可从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行,插入:
<m:item name='更新TAG静态' link='makehtml_tag.php' rank='sys_MakeHtml' target='main' />
5、修改相应文件,也可以直接用压缩包的对应文件进行覆盖
打开文件:include/taglib/tag.lib.php,找到代码,大概87行
1
$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,在底部空白处增加代码:
//获取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.=" <a href='".$url."' target=_blank><b>".$tag."</b></a> ";
}
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有超过一页以上,静态分页就会出问题
`修改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中)
$tnamerule = $this->Fields['typedir']."/".Getpinyin($this->Fields['title'])."_".$this->Fields['id']."_{page}.html";
去掉
".$this->Fields['id']."_
这里还一个小问题,如果用了翻页,生成的翻页代码和栏目的翻页代码顺序是不一致的,这使得需要重新设置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<iframe name='stafrm' frameborder='0' id='stafrm' width='100%' height='40px' src='makehtml_tag_action_list.php?typeid=".$row->tid."'></iframe><br>";
}
$revalue .= "\r\n<iframe name='stafrm' frameborder='0' id='stafrm' width='100%' height='100px' src='makehtml_tag_action_index.php'></iframe><br>";
//add by nic
return $revalue;
}
?>