织梦tags静态化

织梦TAGS标签静态化,相信很多朋友都需要这个功能,且都在网上了解过伪静态等,而本文主要讲解的是如果修改成静态的TAGS,而不是伪静态,资料均来自网上,且测试完毕,完全可以生成静态化标签,但是因为资料本身比较凌乱,所以在此整理下,方便自己也方便大家使用。(目前已经测试5.6和5.7版本,均可)

1:如果标签数量特别多,不建议使用。

2:如果网站数据特别庞大,同样不建议使用。

不建议使用的原因是因为数据太大,生成时间比较多(其实也就是几分钟而已,3万数据的站),每次更新都需生成一次,比较麻烦,不介意以上两点的朋友就继续往下看。
织梦tags静态化_第1张图片

第一步:下载压缩包,压缩包含了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 = “”;,然后把下面的代码更换顺序即可。
织梦tags静态化_第2张图片

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

你可能感兴趣的:(dedecms,php,数据库,开发语言)