dede频道外链不显示,如何解决?

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

下面我将从原因分析解决方案预防措施三个方面,为你详细拆解和解决这个问题。

dede channel 外链不显示
(图片来源网络,侵删)

问题原因分析

DedeCMS 的 {dede:channel} 标签在默认情况下,有以下几个核心逻辑,这些逻辑可能导致外链不显示或显示不正确:

  1. 优先级问题:内链优先

    • DedeCMS 的设计初衷是管理站内内容,当 {dede:channel} 标签解析时,它会优先判断该栏目是否存在对应的内部栏目(即数据表 dede_arctype 中有记录)
    • 如果系统发现 topidreid 指向的栏目在数据库中存在,它就会自动生成指向该内部栏目的链接(如 a href="/plus/list.php?tid=XX")。
    • 只有当内部栏目不存在时,它才会去读取你手动填写的“外部链接”字段(dede_arctype 表中的 content 字段)并生成外链。
  2. 缓存问题

    DedeCMS 有非常强大的缓存机制,当你修改了栏目信息(比如从内链改为外链)后,如果后台的“更新系统缓存”没有执行,前台页面显示的可能还是旧的缓存数据,导致修改不生效。

    dede channel 外链不显示
    (图片来源网络,侵删)
  3. 模板标签使用不当

    • 有时我们使用的标签可能不完整,或者使用了错误的属性来调用外链,默认的 {dede:channel} 标签并不直接输出外链 URL。

解决方案

根据以上原因,我们可以按照以下步骤来排查和解决。

检查并确保外部链接字段正确(治本方法)

这是最根本的解决方法,你需要确保栏目的“外部链接”字段被正确填写和调用。

第一步:后台确认外部链接已填写

dede channel 外链不显示
(图片来源网络,侵删)
  1. 登录 DedeCMS 后台。
  2. 进入「核心」 -> 「栏目管理」。
  3. 找到那个不显示外链的栏目,点击 “[常规属性]” 或直接点击栏目名称进行编辑。
  4. 在栏目编辑页面,找到 “选择外部链接” 这一项(通常在页面的中下部)。
  5. 在输入框中完整地填写你的外部链接https://www.example.com
  6. 务必保存

第二步:使用正确的模板标签调用

默认的 {dede:channel} 标签主要用于生成内链,要正确显示外链,你需要使用它的特定属性。

错误用法(可能导致问题):

{dede:channel type='top' row='8'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

[field:typelink/] 在栏目是内链时指向内部地址,是外链时虽然能获取到外链地址,但有时会被其他逻辑干扰。

推荐用法(明确指定): 使用 type='son'type='self' 配合 reid='父栏目ID' 来限制只显示子栏目,并使用 [field:typedir/][field:typelink/] 来获取链接,但最稳妥的方式是使用 functioninnertext 来处理。

方法A:使用 innertext 属性(推荐)

这是最灵活、最推荐的方法,你可以自定义链接的 HTML 结构。

{dede:channel type='top' row='8'}
    <a href="[field:typelink/]">[field:typename/]</a>
    <!-- 或者更明确地判断 -->
    <a href="[field:typedir/]" target="_blank">[field:typename/]</a>
{/dede:channel}

注意: [field:typedir/][field:typelink/] 在处理外链时,[field:typedir/] 会直接输出你在后台填写的外部链接地址,而 [field:typelink/] 也会输出,通常两者效果一致。

方法B:使用 function 属性进行二次开发

innertext 仍然无法满足复杂需求,可以使用 function 调用一个自定义函数。

  1. /include/extend.func.php 文件中添加一个自定义函数:

    // 获取栏目链接,如果是外链则返回外链地址
    function GetChannelLink($typeid)
    {
        global $dsql;
        $query = "SELECT ispart, content FROM `#@__arctype` WHERE id = '$typeid'";
        $row = $dsql->GetOne($query);
        // 如果是外部链接 (ispart=1 通常表示外部链接,但具体看你的系统设置)
        // 或者直接判断 content 字段是否包含 'http'
        if (!empty($row['content']) && strpos($row['content'], 'http') === 0) {
            return $row['content'];
        } else {
            // 否则返回内部栏目链接
            return GetOneTypeUrlA($typeid);
        }
    }
  2. 在模板中调用:

    {dede:channel type='top' row='8'}
        <a href="{dede:field name='typeid' function="GetChannelLink(@me)"/}" target="_blank">[field:typename/]</a>
    {/dede:channel}

    这种方法非常强大,但需要一定的 PHP 基础。

清理和更新缓存

无论你修改了什么,这一步都至关重要。

  1. 登录 DedeCMS 后台。
  2. 顶部菜单栏找到「系统」 -> 「一键更新网站」。
  3. 在打开的页面中,勾选 “更新系统缓存”“更新栏目缓存”
  4. 点击“开始更新”。
  5. 更新完成后,刷新你的前台页面,查看外链是否正常显示。

检查数据库记录(终极排查)

如果以上方法都无效,可能是数据库数据有问题。

  1. 登录你的网站数据库管理工具(如 phpMyAdmin)。
  2. 找到 DedeCMS 的数据表,通常名为 dede_arctype(你的表前缀可能不是 dede_)。
  3. 找到对应栏目的那条记录。
  4. 检查两个字段:
    • content: 这个字段应该存储了你填写的完整外部链接,如 https://www.example.com,确保它不为空且格式正确。
    • ispart: 这个字段通常为 0 表示内部栏目,为 1 表示外部链接,请确认它是否被正确设置为 1

预防措施

为了避免未来再次遇到这个问题,建议养成良好的操作习惯:

  1. 先建栏目,再填内容:尽量先在后台创建好所有栏目(包括外链栏目),再进行内容的发布和模板的制作。
  2. 使用缓存:理解并善用 DedeCMS 的缓存机制,栏目、文章等内容修改后,及时更新缓存,这能显著提升网站速度。
  3. 规范命名:为内部栏目和外部链接栏目使用不同的命名规范,例如内部栏目使用“公司新闻”、“产品中心”,外部链接使用“友情链接-百度”、“合作伙伴-阿里”等,便于区分。
  4. 模板分离:如果导航栏中外链和内链混用,可以考虑在模板中使用 {dede:channel}{dede:flink}(友情链接标签)相结合的方式,让它们各司其职。
问题现象 最可能的原因 推荐解决方案
栏目显示为内部链接,而非设置的外部链接 系统优先调用内链,即使你填了外链。 方案一:在后台确认外链已填写,并使用 [field:typedir/][field:typelink/] 在模板中调用。
修改了外链设置,但前台页面无变化 缓存未更新 方案二:进入“一键更新网站”,更新“系统缓存”和“栏目缓存”。
所有外链都无法显示,或者显示逻辑混乱 数据库记录错误标签使用不当 方案三:检查数据库 dede_arctype 表中对应栏目的 contentispart 字段,或尝试使用 function 自定义函数。

按照这个流程,99% 的 DedeCMS 栏目外链不显示问题都可以得到解决,希望对你有帮助!

-- 展开阅读全文 --
头像
CruiseControl如何用于C语言项目持续集成?
« 上一篇 12-10
C语言SetWindowText如何修改窗口标题?
下一篇 » 12-10

相关文章

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

目录[+]