织梦tag标签静态插件含手机,如何实现?

99ANYc3cd6
预计阅读时长 30 分钟
位置: 首页 织梦建站 正文

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

织梦tag标签静态插件含手机
(图片来源网络,侵删)

核心思路

这个方案的核心思想是:将tag列表页和tag内容页都生成静态的HTML文件,并且通过一个判断,让手机端和PC端访问同一个URL时,自动跳转到对应风格的模板。

具体分为两步:

  1. 修改标签源码:让织梦在生成tag页面时,像生成栏目页和文章页一样,生成静态的HTML文件。
  2. 创建手机端模板:创建专门的手机端tag模板,并修改核心文件,使其能根据设备类型自动选择模板。

第一步:修改标签源码,实现tag静态化

这一步的目的是让织梦的标签管理页面,在更新tag时,能真正生成静态HTML文件,而不是动态的tags.php

修改 taglib/taglib.tag.php 文件

这个文件是织梦标签库的核心,负责解析和生成tag相关的页面。

织梦tag标签静态插件含手机
(图片来源网络,侵删)

操作步骤:

  1. 用FTP或文件管理器登录您的网站服务器。
  2. 找到并下载 /include/taglib/taglib.tag.php 文件。
  3. 用代码编辑器(如VS Code, Sublime Text, Notepad++)打开它。
  4. 找到 else if($type=='list') 这个代码段(大约在65-85行)。
  5. 将原来的代码
    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;
    }
  6. 替换为以下新代码
    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;
    }
  7. 保存并上传覆盖原文件。

修改说明:这个修改主要是为了确保在调用 {dede:tag row='30' getall='1'} 时,生成的每个tag链接都是正确的静态链接格式。

修改 dedesql.class.php 文件(重要!)

这是实现静态化的最关键一步,我们需要告诉织梦,tag页面需要生成静态文件。

操作步骤:

织梦tag标签静态插件含手机
(图片来源网络,侵删)
  1. 找到并下载 /include/dedesql.class.php 文件。
  2. 打开它,找到 function SetQuery($sql) 这个函数(大约在300行左右)。
  3. 在函数的 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;
    }
    // --- 关键修改结束 ---
  4. 保存并上传覆盖原文件。

修改 arc.taglist.class.php 文件

这个文件负责生成tag列表页和内容页,我们需要修改它的构造函数,让它根据我们的标记来生成静态文件。

操作步骤:

  1. 找到并下载 /include/arc.taglist.class.php 文件。
  2. 找到 function __construct($typeid, $getall = 1) 这个构造函数。
  3. 在函数内 $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';
    }
    // --- 关键修改结束 ---
  4. 保存并上传覆盖原文件。

修改 tag_makehtml.php 文件

这个文件是后台生成tag页面的执行文件,我们需要修改它,让它调用我们上面修改过的类来生成静态文件。

操作步骤:

  1. 找到并下载 /tag_makehtml.php 文件。

  2. 找到 //更新tag 的注释部分(大约在90行左右)。

  3. 将原来的代码

    //更新tag
    $tags = explode(',', $tag);
    foreach ($tags as $k => $tagname)
    {
        $tagname = trim($tagname);
        if ($tagname != '')
        {
            $dsql->ExecuteNoneQuery("Update `#@__tagindex` set total={$total} where tagaid='$tagid'");
        }
    }
  4. 替换为以下新代码

    // --- 关键修改开始 ---
    //更新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; // 重置标记
        }
    }
    // --- 关键修改结束 ---
  5. 保存并上传覆盖原文件。

生成tag目录规则

为了让tag的静态文件有良好的目录结构(/tags/网页设计/index.html),我们需要修改一个配置。

  1. 进入织梦后台 -> 系统 -> 核心设置
  2. 找到 “栏目链接默认规则”,将其修改为:{typedir}/tags/{tag}/
  3. 保存。

第二步:创建手机端模板并实现自动跳转

现在tag页面可以静态化了,接下来是实现手机端适配。

创建手机端tag模板

  1. 在您的PC端模板文件夹(/templets/default/)下,创建一个名为 mobile 的文件夹。
  2. 将PC端的 taglist.htm 模板文件复制到 /templets/default/mobile/ 文件夹中。
  3. 根据需要修改 /templets/default/mobile/taglist.htm 文件,使其适应手机屏幕(使用响应式CSS或修改HTML结构)。

修改 index.php 实现自动跳转

我们需要修改网站根目录下的 index.php,让它能识别手机设备并自动跳转到手机版。

操作步骤:

  1. 下载网站根目录下的 index.php 文件。
  2. 在文件最开头 <?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);
            }
        }
    }
    // --- 关键修改结束 ---
  3. 保存并上传覆盖原文件。

注意:上面的跳转逻辑是如果检测到手机,并且当前URL不包含 /mobile/,就刷新页面,这样访问 你的域名/tags/网页设计/ 时,index.php 会先运行,检测到是手机,然后再次访问同一个URL,这次因为 index.php 已经执行过,织梦核心会接管,并因为URL中不包含 mobile 字样而加载PC端模板,这个方法可能不够优雅。

更推荐的方法(修改 arc.taglist.class.php):

  1. 打开 /include/arc.taglist.class.php 文件。

  2. 找到 function MakeHtml() 函数。

  3. 在函数内生成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。

  1. 登录织梦后台。
  2. 进入 “核心” -> “批量维护” -> “文档关键词维护”
  3. 点击右上角的 “开始更新HTML” 按钮。
  4. 系统会开始遍历所有tag,并为每个tag生成一个静态的HTML文件,这个过程可能需要一些时间,取决于您网站tag的数量。

完成后,您就可以通过浏览器访问 你的域名/tags/网页设计/ 这样的链接,查看生成的静态tag页面了,用手机访问该链接,应该会显示您创建的手机端模板样式。

重要注意事项

  • 备份!备份!备份! 在修改任何核心文件之前,请务必备份原文件,以防出错导致网站无法访问。
  • 模板路径:请确保您的模板路径(templets/default)和 mobile 文件夹的路径与代码中的路径一致。
  • 权限问题:确保服务器有权限在 /tags/ 目录下创建文件夹和文件,如果无法生成,请检查该目录的写入权限(通常设置为755或777)。
  • 测试:生成后,请务必在PC和手机上多测试几个tag链接,确保静态化和跳转都正常工作。
  • 织梦版本:此方法基于DedeCMS 5.7版本,其他版本可能存在少量代码差异,但核心逻辑相通,请根据实际情况微调。
-- 展开阅读全文 --
头像
米拓与织梦,哪个建站更方便?
« 上一篇 2025-12-21
ParentProcess在C语言中如何实现进程创建与通信?
下一篇 » 2025-12-21

相关文章

取消
微信二维码
支付宝二维码

目录[+]