下面我将为您提供一个完整的解决方案,包括插件原理、手动修改方法和注意事项,这个方法是目前最稳定、最通用的,适用于大多数织梦版本(如DedeCMS 5.7等)。

核心思路
这个方案的核心思想是:将tag列表页和tag内容页都生成静态的HTML文件,并且通过一个判断,让手机端和PC端访问同一个URL时,自动跳转到对应风格的模板。
具体分为两步:
- 修改标签源码:让织梦在生成tag页面时,像生成栏目页和文章页一样,生成静态的HTML文件。
- 创建手机端模板:创建专门的手机端tag模板,并修改核心文件,使其能根据设备类型自动选择模板。
第一步:修改标签源码,实现tag静态化
这一步的目的是让织梦的标签管理页面,在更新tag时,能真正生成静态HTML文件,而不是动态的tags.php。
修改 taglib/taglib.tag.php 文件
这个文件是织梦标签库的核心,负责解析和生成tag相关的页面。

操作步骤:
- 用FTP或文件管理器登录您的网站服务器。
- 找到并下载
/include/taglib/taglib.tag.php文件。 - 用代码编辑器(如VS Code, Sublime Text, Notepad++)打开它。
- 找到
else if($type=='list')这个代码段(大约在65-85行)。 - 将原来的代码:
else if($type=='list') { $typeid = isset($typeid) && is_numeric($typeid) ? $typeid : 0; $geturl = 'tags.php?/'.$GetTag.'/'; $tags = GetTags($ctag->GetAtt('num')); $dtp2 = new DedeTagParse(); $dtp2->SetNameSpace('field','[',']'); $dtp2->LoadString($ctag->GetInnerText()); $GLOBALS['autoindex'] = 1; foreach($tags as $k=>$fields) { if($typeid>0 && $fields['typeid']!=$typeid) continue; $fields['tag'] = $GetTag; $fields['url'] = $cfg_cmsurl.'/'.$geturl; $dtp2->Assign('field', $fields); $revalue .= $dtp2->GetResult(); $GLOBALS['autoindex']++; } return $revalue; } - 替换为以下新代码:
else if($type=='list') { $typeid = isset($typeid) && is_numeric($typeid) ? $typeid : 0; $geturl = 'tags.php?/'.$GetTag.'/'; $tags = GetTags($ctag->GetAtt('num')); $dtp2 = new DedeTagParse(); $dtp2->SetNameSpace('field','[',']'); $dtp2->LoadString($ctag->GetInnerText()); $GLOBALS['autoindex'] = 1; foreach($tags as $k=>$fields) { if($typeid>0 && $fields['typeid']!=$typeid) continue; // --- 关键修改开始 --- $fields['tag'] = $GetTag; $fields['url'] = $cfg_cmsurl.'/'.$geturl; $fields['link'] = "<a href='".$fields['url']."'>".$fields['tag']."</a>"; $dtp2->Assign('field', $fields); $revalue .= $dtp2->GetResult(); $GLOBALS['autoindex']++; // --- 关键修改结束 --- } return $revalue; } - 保存并上传覆盖原文件。
修改说明:这个修改主要是为了确保在调用 {dede:tag row='30' getall='1'} 时,生成的每个tag链接都是正确的静态链接格式。
修改 dedesql.class.php 文件(重要!)
这是实现静态化的最关键一步,我们需要告诉织梦,tag页面需要生成静态文件。
操作步骤:

- 找到并下载
/include/dedesql.class.php文件。 - 打开它,找到
function SetQuery($sql)这个函数(大约在300行左右)。 - 在函数的
switch($this->version)语句之前,添加如下代码:// --- 关键修改开始 --- // 处理tag静态化 if (preg_match('/SELECT FROM `#@__tagindex`/i', $sql) || preg_match('/SELECT FROM `#@__taglist`/i', $sql)) { // 标记这是一个tag查询,需要生成静态 $GLOBALS['tags_need_html'] = 1; } // --- 关键修改结束 --- - 保存并上传覆盖原文件。
修改 arc.taglist.class.php 文件
这个文件负责生成tag列表页和内容页,我们需要修改它的构造函数,让它根据我们的标记来生成静态文件。
操作步骤:
- 找到并下载
/include/arc.taglist.class.php文件。 - 找到
function __construct($typeid, $getall = 1)这个构造函数。 - 在函数内
$this->dsql = $dsql;这一行后面,添加如下代码块:// --- 关键修改开始 --- // 检查是否需要生成静态tag页面 if (isset($GLOBALS['tags_need_html']) && $GLOBALS['tags_need_html'] == 1) { // 获取当前tag的ID $this->TagInfos = $this->dsql->GetOne("SELECT * FROM `#@__tagindex` WHERE tagaid = '{$this->TagId}'"); if (is_array($this->TagInfos)) { $this->TagId = $this->TagInfos['id']; $this->TagName = $this->TagInfos['tagname']; } // 设置静态文件名规则 $this->MakeHtmlTag = true; $this->TagDir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_cmspath'].'/tags/'; if (!is_dir($this->TagDir)) @mkdir($this->TagDir, 0777); $this->TagFileName = $this->TagDir.$this->TagInfos['tagname'].'/index.html'; } // --- 关键修改结束 --- - 保存并上传覆盖原文件。
修改 tag_makehtml.php 文件
这个文件是后台生成tag页面的执行文件,我们需要修改它,让它调用我们上面修改过的类来生成静态文件。
操作步骤:
-
找到并下载
/tag_makehtml.php文件。 -
找到
//更新tag的注释部分(大约在90行左右)。 -
将原来的代码:
//更新tag $tags = explode(',', $tag); foreach ($tags as $k => $tagname) { $tagname = trim($tagname); if ($tagname != '') { $dsql->ExecuteNoneQuery("Update `#@__tagindex` set total={$total} where tagaid='$tagid'"); } } -
替换为以下新代码:
// --- 关键修改开始 --- //更新tag并生成静态页面 $tags = explode(',', $tag); foreach ($tags as $k => $tagname) { $tagname = trim($tagname); if ($tagname != '') { $dsql->ExecuteNoneQuery("Update `#@__tagindex` set total={$total} where tagaid='$tagid'"); // 生成静态页面核心代码 $GLOBALS['tags_need_html'] = 1; $tl = new TagList($tagid); $tl->MakeHtml(); $GLOBALS['tags_need_html'] = 0; // 重置标记 } } // --- 关键修改结束 --- -
保存并上传覆盖原文件。
生成tag目录规则
为了让tag的静态文件有良好的目录结构(/tags/网页设计/index.html),我们需要修改一个配置。
- 进入织梦后台 -> 系统 -> 核心设置。
- 找到 “栏目链接默认规则”,将其修改为:
{typedir}/tags/{tag}/ - 保存。
第二步:创建手机端模板并实现自动跳转
现在tag页面可以静态化了,接下来是实现手机端适配。
创建手机端tag模板
- 在您的PC端模板文件夹(
/templets/default/)下,创建一个名为mobile的文件夹。 - 将PC端的
taglist.htm模板文件复制到/templets/default/mobile/文件夹中。 - 根据需要修改
/templets/default/mobile/taglist.htm文件,使其适应手机屏幕(使用响应式CSS或修改HTML结构)。
修改 index.php 实现自动跳转
我们需要修改网站根目录下的 index.php,让它能识别手机设备并自动跳转到手机版。
操作步骤:
- 下载网站根目录下的
index.php文件。 - 在文件最开头
<?php之后,添加以下代码:// --- 关键修改开始 --- // 手机端自动跳转 if isset($_SERVER['HTTP_USER_AGENT'])) { $useragent = $_SERVER['HTTP_USER_AGENT']; if (preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||strpos($useragent,'Mobile')!==false||strpos($useragent,'Android')!==false||strpos($useragent,'iPhone')!==false||strpos($useragent,'iPad')!==false||strpos($useragent,'iPod')!==false) { // 获取当前URL $mobile_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; // 如果当前不在手机版目录,则跳转 if(strpos($_SERVER['PHP_SELF'], '/mobile/') === false) { header('Location: '.$mobile_url); } } } // --- 关键修改结束 --- - 保存并上传覆盖原文件。
注意:上面的跳转逻辑是如果检测到手机,并且当前URL不包含 /mobile/,就刷新页面,这样访问 你的域名/tags/网页设计/ 时,index.php 会先运行,检测到是手机,然后再次访问同一个URL,这次因为 index.php 已经执行过,织梦核心会接管,并因为URL中不包含 mobile 字样而加载PC端模板,这个方法可能不够优雅。
更推荐的方法(修改 arc.taglist.class.php):
-
打开
/include/arc.taglist.class.php文件。 -
找到
function MakeHtml()函数。 -
在函数内生成HTML文件的代码(类似
file_put_contents($this->TagFileName, $this->GetHtml());)之前,添加以下代码:// --- 关键修改开始 --- // 根据设备类型选择模板 if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(mobile|android|iphone|ipod|ipad|ios)/i", $_SERVER['HTTP_USER_AGENT'])) { $tempfile = $this->tempfile; $this->tempfile = str_replace('templets/default', 'templets/default/mobile', $tempfile); } // --- 关键修改结束 ---这个方法更直接,在生成HTML文件之前,判断一下用户代理,如果是移动设备,就自动切换到
mobile目录下的模板。
第三步:更新生成tag标签
完成以上所有修改后,最后一步就是重新生成tag。
- 登录织梦后台。
- 进入 “核心” -> “批量维护” -> “文档关键词维护”。
- 点击右上角的 “开始更新HTML” 按钮。
- 系统会开始遍历所有tag,并为每个tag生成一个静态的HTML文件,这个过程可能需要一些时间,取决于您网站tag的数量。
完成后,您就可以通过浏览器访问 你的域名/tags/网页设计/ 这样的链接,查看生成的静态tag页面了,用手机访问该链接,应该会显示您创建的手机端模板样式。
重要注意事项
- 备份!备份!备份! 在修改任何核心文件之前,请务必备份原文件,以防出错导致网站无法访问。
- 模板路径:请确保您的模板路径(
templets/default)和mobile文件夹的路径与代码中的路径一致。 - 权限问题:确保服务器有权限在
/tags/目录下创建文件夹和文件,如果无法生成,请检查该目录的写入权限(通常设置为755或777)。 - 测试:生成后,请务必在PC和手机上多测试几个tag链接,确保静态化和跳转都正常工作。
- 织梦版本:此方法基于DedeCMS 5.7版本,其他版本可能存在少量代码差异,但核心逻辑相通,请根据实际情况微调。
