dede文章页如何自动添加关键词内链锚文本?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

简单粗暴的修改代码法更灵活的标签调用法强烈推荐使用第二种方法,因为它更安全、更灵活,符合DedeCMS的标签化思想。

dede文章页自动添加关键词内链锚文本
(图片来源网络,侵删)

修改 arc.archives.class.php 文件(不推荐,但最直接)

这种方法的核心是修改DedeCMS处理文章内容的底层文件,让它自动在发布或更新文章时,将关键词替换为带有链接的HTML代码。

优点:

  • 一次设置,一劳永逸,所有文章自动生效。

缺点:

  • 有风险:直接修改核心文件,在DedeCMS升级后需要重新修改。
  • 不够灵活:无法在特定页面(如首页、列表页)控制是否显示内链。
  • 可能出错:如果修改不当,可能导致文章内容显示异常。

操作步骤:

dede文章页自动添加关键词内链锚文本
(图片来源网络,侵删)
  1. 找到文件 打开你的DedeCMS程序根目录,找到并打开以下文件: /include/arc.archives.class.php

  2. 找到关键函数 在文件中搜索 ReplaceKeyword 函数,这个函数就是专门用来处理关键词替换的。

  3. 修改函数 找到类似下面的代码段(不同版本DedeCMS可能略有差异,但核心逻辑一致):

    // 找到这段代码
    foreach($kws as $k)
    {
        $k = trim($k);
        if($k!="")
        {
            // 如果开启了是否全高亮,则进行高亮
            if($this->SplitKeyword)
            {
                $row['body'] = str_ireplace($k, "<span class='highlight'>".$k."</span>", $row['body']);
            }
        }
    }

    注意: 你的代码可能不是 str_ireplace,而是 preg_replace,但逻辑是相同的。

    dede文章页自动添加关键词内链锚文本
    (图片来源网络,侵删)
  4. 替换为新的逻辑 将上述代码块替换为下面的代码,这段代码会检查关键词是否已经存在链接,如果没有,才添加新的链接。

    // --- 开始替换 ---
    foreach($kws as $k)
    {
        $k = trim($k);
        if($k != "")
        {
            // 如果开启了是否全高亮,则进行高亮(这里我们注释掉或删除高亮功能,专注于内链)
            // if($this->SplitKeyword)
            // {
            //     $row['body'] = str_ireplace($k, "<span class='highlight'>".$k."</span>", $row['body']);
            // }
            // --- 新增的内链逻辑 ---
            // 1. 构造要查找的正则表达式,确保匹配的是独立的单词(避免匹配“百度”时把“百度一下”也匹配了)
            $rgx = "/(?!<a[^>]*?>)".$k."(?![^<]*?>)/i";
            // 2. 构造替换的链接HTML
            // 这里假设你的关键词链接URL格式是 /tags.php?/关键词/
            // 你也可以自定义,/plus/search.php?keyword=关键词 或者直接指向指定栏目
            $replacement = '<a href="/tags.php?/'.$k.'" title="'.$k.'" target="_blank" class="keyword-link">'.$k.'</a>';
            // 3. 执行替换,只替换未加链接的关键词
            $row['body'] = preg_replace($rgx, $replacement, $row['body']);
        }
    }
    // --- 替换结束 ---
  5. 保存文件 保存 arc.archives.class.php 文件,当你重新生成文章页HTML时,关键词就会被自动加上链接了。


使用自定义标签 {dede:autolink/}(强烈推荐)

这种方法更符合DedeCMS的设计哲学,通过创建一个自定义标签来实现。优点是安全、灵活,且不影响核心文件

操作步骤:

第1步:创建自定义函数文件

  1. 在DedeCMS根目录下的 /include/extend.func.php 文件中,添加以下PHP代码,如果这个文件不存在,请自己创建一个。

    /**
     * 文章内容关键词自动内链
     * @param string $body  文章内容
     * @param int    $num   关键词数量限制,0表示不限制
     * @param string $title 链接的title属性,留空则使用关键词本身
     * @return string       处理后的文章内容
     */
    function GetAutoLink($body, $num = 5, $title = '')
    {
        if (empty($body)) return $body;
        // 获取当前文章的关键词
        $keywords = GetKeyWords($body);
        if (empty($keywords)) return $body;
        $tags = explode(',', $keywords);
        $count = 0; // 替换计数器
        foreach ($tags as $tag) {
            $tag = trim($tag);
            if (empty($tag)) continue;
            // 防止无限循环,限制替换次数
            if ($count >= $num && $num > 0) break;
            // 构造正则表达式,匹配独立的关键词
            $rgx = '/(?!<a[^>]*?>)'.preg_quote($tag, '/').'(?![^<]*?>)/i';
            // 构造链接
            $link_url = "/tags.php?/" . urlencode($tag) . "/";
            $link_title = !empty($title) ? $title : $tag;
            $replacement = '<a href="'.$link_url.'" title="'.$link_title.'" target="_blank" class="keyword-autolink">'.$tag.'</a>';
            // 执行替换
            $new_body = preg_replace($rgx, $replacement, $body);
            // 如果内容发生了变化,说明成功替换了一次
            if ($new_body != $body) {
                $body = $new_body;
                $count++;
            }
        }
        return $body;
    }
    /**
     * 辅助函数:从文章内容中提取关键词
     * 这里简化处理,直接使用文章的关键词字段,你也可以使用其他分词算法。
     * 在实际调用中,我们直接传递了文章内容,这里可以根据需要优化。
     */
    function GetKeyWords($body)
    {
        // 这个函数在 {dede:autolink/} 标签里会被DedeCMS自动处理,
        // 我们只需要在模板里调用 GetAutoLink 函数并传入文章内容即可。
        // 所以这个函数可以留空或简化。
        // 在模板中,我们会这样用:{dede:field.body function='GetAutoLink(@me, 3)'/}
        return '';
    }

    注意: 我在上面的函数中直接传入了$body,所以模板调用会更简单,你可以直接使用下面的模板调用方式。

第2步:在文章页模板中调用自定义标签

  1. 打开你的文章页模板文件,通常位于 /templets/default/article_article.htm

  2. 找到文章内容标签 {dede:field.body/}

  3. 将其替换为调用我们刚刚创建的函数,并传递参数:

    {dede:field.body function='GetAutoLink(@me, 5, @me)'/}

    参数解释:

    • @me:DedeCMS模板标签中的特殊变量,代表当前标签的原始值,这里 @me {dede:field.body/} 的原始内容,即文章正文。
    • 5:这是传递给 GetAutoLink 函数的第二个参数 $num,表示每篇文章最多替换5个关键词,你可以根据需要修改这个数字,设为 0 或不传则表示不限制。
    • @me:这是传递给函数的第三个参数 $title,我们这里用 @me 再传一次,表示链接的 title 属性和关键词文本一样,你也可以写死一个值,'查看更多关于' . $tag . '的文章',但需要调整函数,简单起见,保持一致即可。

第3步:更新和测试

  1. 保存你的模板文件。
  2. 进入DedeCMS后台,找到“生成” -> “更新主页HTML”、“更新栏目HTML”、“更新文档HTML”。
  3. 重新生成一篇或多篇文章的页面,然后去前台查看效果,你会发现文章中的关键词已经被自动加上了链接。

重要补充与注意事项

  1. 关键词设置:无论使用哪种方法,前提是你的文章在后台字段中填写了关键词,并且用英文逗号隔开,这是DedeCMS提取关键词的基础。

  2. URL路径:在代码中,我使用了 /tags.php?/关键词/ 这种URL格式,这是DedeCMS标签(Tag)的标准路径,请确保你的网站启用了并正确配置了标签(Tag)功能,如果你想指向其他页面,请自行修改 $link_url 的值。

  3. 性能考虑:自动替换正则表达式会消耗一定的服务器资源,如果你的文章非常长,或者关键词非常多,可能会对页面加载速度产生微小影响,方法二中通过 $num 参数限制替换次数是一个很好的优化手段。

  4. 样式控制:我在代码中给链接添加了 class="keyword-link"class="keyword-autolink",你可以在你的CSS文件中为这个类定义样式,

    .keyword-link, .keyword-autolink {
        color: #0066cc;
        text-decoration: none;
        border-bottom: 1px dashed #0066cc;
    }
    .keyword-link:hover, .keyword-autolink:hover {
        color: #ff6600;
        text-decoration: underline;
    }
  5. 避免过度优化:不要给一篇文章设置太多关键词,也不要让一个关键词在文章中被重复链接多次,这会被搜索引擎视为“过度优化”或“垃圾链接”,反而可能起到反效果,通常一篇文章设置3-5个核心关键词,每个关键词替换1-2次是比较合理的。

对于大多数用户,强烈推荐使用方法二(自定义标签),它更安全、更灵活,且不破坏DedeCMS的文件结构,是进行二次开发的最佳实践。

-- 展开阅读全文 --
头像
dede留言板回复只显示管理回复几个字
« 上一篇 12-03
C语言init1002是什么?
下一篇 » 12-03

相关文章

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

目录[+]