1. 理解织梦DedeCMS网址导航的工作原理
  2. 创建和调用自定义模型(这是关键)
  3. 制作全新的前端模板

第一步:理解织梦DedeCMS网址导航的工作原理

默认的织梦网址导航功能比较简单,它依赖于一个核心文件:/plus/digg.php,这个文件会读取系统后台设置的一些导航链接,并套用一个固定的模板文件 plus/digg.htm

织梦dede网址导航二次开发模板
(图片来源网络,侵删)

这种方式的缺点很明显:

  • 内容管理不灵活:链接只能在后台“基本参数”->“其他选项”里设置,数量有限,无法分类。
  • 模板限制:只能修改 plus/digg.htm,无法像调用文章、栏目那样,使用自由定义的模板。

二次开发的核心思路是:抛弃原有的 /plus/digg.phpplus/digg.htm,改用织梦最强大的“自定义模型”功能来创建一个真正的“网址导航”系统。 这样我们就可以像管理文章一样管理网址,拥有无限分类、自定义字段和完全自由的模板。


第二步:创建和调用自定义模型(核心步骤)

这是整个二次开发最关键的一步,我们将创建一个新的数据模型,专门用来存放网址信息。

进入后台,创建自定义模型

  1. 登录织梦DedeCMS后台。
  2. 在左侧菜单栏找到 【核心】 -> 模型管理】
  3. 点击右上角的 【增加一个新模型】
  4. 填写模型信息:
    • 模型名称:填写 网址导航 (或你喜欢的名字)。
    • 模型表前缀:系统会自动生成,如 dede_addonnav,无需修改。
    • 模型介绍:填写 用于管理各类网址链接,支持分类和自定义字段
    • 是否支持栏目勾选,这是为了可以给网址分类。
    • 是否支持发布勾选,这样才能在后台添加内容。
  5. 点击 【保存】,模型创建成功。

为新模型添加自定义字段

我们需要定义一个网址应该包含哪些信息,点击刚创建的模型名称“网址导航”,进入字段管理。

织梦dede网址导航二次开发模板
(图片来源网络,侵删)
  • 必须添加的字段:

    • url (链接地址):
      • 字段名:url
      • 字段类型:单行文本
      • 字段说明:网址链接
      • 高级选项 -> 是否为必填项
    • logo (网站图标):
      • 字段名:logo
      • 字段类型:媒体图片
      • 字段说明:网站Logo
      • 高级选项 -> 是否为必填项:否
    • description (网站描述):
      • 字段名:description
      • 字段类型:多行文本(文本域)
      • 字段说明:网站简介
      • 高级选项 -> 是否为必填项:否
  • 可选添加的字段:

    • click (点击次数):
      • 字段名:click
      • 字段类型:数字
      • 字段说明:点击次数
      • 高级选项 -> 是否为必填项:否,并设置为默认值0,用于统计点击。
    • adddate (添加时间):
      • 字段名:adddate
      • 字段类型:日期时间
      • 字段说明:收录时间
      • 高级选项 -> 是否为必填项:否,系统会自动填充当前时间。

添加完所有需要的字段后,点击 【保存】

创建栏目用于分类

  1. 在后台左侧菜单找到 【核心】 -> 【栏目管理】
  2. 点击 【增加一个顶级栏目】
  3. 填写栏目信息:
    • 栏目名称网址导航 (作为总栏目)。
    • 栏目类型:选择 外部链接内部栏目 (如果希望导航页有自己的独立URL,选内部栏目)。
    • 模型选择我们刚刚创建的 网址导航 模型! 这是关键!
    • 列表模板:稍后我们创建的模板文件名,nav_list.htm
    • 列表命名规则:可以自定义,如 {typedir}/nav_{page}.html
  4. 保存后,你可以在这个“网址导航”栏目下再创建子栏目,常用网站”、“设计资源”、“技术博客”等,实现分类管理。

在后台添加网址数据

你的“网址导航”系统框架已经搭好了。

织梦dede网址导航二次开发模板
(图片来源网络,侵删)
  1. 进入 【核心】 -> 发布管理】 ->
  2. 在右上角的“选择栏目”下拉框中,选择你刚刚创建的“网址导航”或其下的子栏目。
  3. 你会看到我们自定义的字段:标题、网址链接、Logo、网站描述等。
  4. 填写信息并上传Logo,然后发布。

重复此步骤,添加你所有的网址链接。


第三步:制作全新的前端模板

我们来制作两个模板文件:一个用于列表页(显示所有网址或某一分类下的网址),一个用于内容页(点击某个网址后跳转的页面)。

创建列表页模板 (nav_list.htm)

这个文件放在你网站的 /templets/default/ 目录下(如果你使用了其他模板,则放在对应的模板目录)。

代码示例 (nav_list.htm):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
    <meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
    <link rel="stylesheet" href="/templets/default/css/style.css"> <!-- 假设你有一个公共样式文件 -->
    <style>
        /* 一些简单的导航站样式 */
        .nav-container { max-width: 1200px; margin: 20px auto; padding: 0 20px; }
        .nav-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 20px; }
        .nav-item { border: 1px solid #eee; padding: 15px; text-align: center; border-radius: 8px; transition: all 0.3s; }
        .nav-item:hover { box-shadow: 0 4px 8px rgba(0,0,0,0.1); transform: translateY(-2px); }
        .nav-item img { max-width: 80px; max-height: 80px; margin-bottom: 10px; }
        .nav-item h3 { font-size: 16px; margin: 10px 0; }
        .nav-item p { font-size: 12px; color: #666; margin-bottom: 10px; }
        .nav-item a { display: inline-block; background: #007bff; color: #fff; padding: 5px 15px; border-radius: 4px; text-decoration: none; }
        .nav-item a:hover { background: #0056b3; }
    </style>
</head>
<body>
    <div class="nav-container">
        <h1>{dede:field.title/}</h1>
        <p>{dede:field.description/}</p>
        <div class="nav-grid">
            {dede:arclist row='20' titlelen='30' orderby='pubdate' idlist=''}
            <!--
                这里我们使用arclist标签来调用网址数据。
                因为我们的模型是自定义的,arclist默认不识别。
                需要修改 /include/taglib/arclist.lib.php 文件,在大概第380行左右的
                $typeidQuery = " arc.typeid IN($typeid) AND ";
                下面添加一行:
                $addSql = " AND arc.arctypeid IN($typeid) ";
                这样才能正确调用。
                一个更简单的方法是直接用SQL查询,但arclist是标准做法。
            -->
            <div class="nav-item">
                <a href="[field:url/]" target="_blank">
                    <img src="[field:logo/]" alt="[field:title/]" onerror="this.src='/templets/default/images/default-logo.png';">
                </a>
                <h3><a href="[field:url/]" target="_blank">[field:title/]</a></h3>
                <p>[field:description/]</p>
            </div>
            {/dede:arclist}
        </div>
    </div>
</body>
</html>

注意: 上述 arclist 调用可能需要根据你的织梦版本和修改进行微调。arclist 调用自定义模型数据有问题,可以使用 {dede:sql} 标签直接查询,更灵活但性能稍差。

使用 sql 标签的替代方案:

{dede:sql sql="SELECT * FROM `dede_addonnav` ORDER BY id DESC"}
<div class="nav-item">
    <a href="[field:url/]" target="_blank">
        <img src="[field:logo/]" alt="[field:title/]" onerror="this.src='/templets/default/images/default-logo.png';">
    </a>
    <h3><a href="[field:url/]" target="_blank">[field:title/]</a></h3>
    <p>[field:description/]</p>
</div>
{/dede:sql}

dede_addonnav 是你在第一步创建模型时系统自动生成的表名,请务必确认你的表名。

页模板 (可选)

如果你的网址导航也需要一个“详情页”(虽然大部分情况下是直接跳转),可以创建 nav_article.htm

但通常,我们只需要在列表页点击就直接跳转到 url 字段指定的地址,列表页模板已经足够。

模板标签说明

  • {dede:field.title/}: 调用栏目标题。
  • {dede:field.description/}: 调用栏目描述。
  • [field:url/]: 调用自定义字段 url 的值。
  • [field:logo/]: 调用自定义字段 logo 的值。
  • [field:title/]: 调用文章(在这里是网址)的标题。
  • [field:description/]: 调用自定义字段 description 的值。

总结与注意事项

  1. 核心思想:二次开发织梦网址导航,最佳实践是放弃原生功能,使用自定义模型,这赋予了系统最大的灵活性和扩展性。
  2. 文件位置:所有模板文件(.htm)都必须放在 /templets/你的模板名称/ 目录下。
  3. URL伪静态:为了更好的SEO,建议为栏目设置伪静态规则,在后台“系统”->“核心设置”中开启伪静态,并根据你的服务器环境(Apache或Nginx)配置相应的规则文件(.htaccessnginx.conf)。
  4. 点击统计:如果你添加了 click 字段,可以在网址的 <a> 标签中加入 onclick="window.open(this.href); document.getElementById('click_<?php echo $aid;?>').click(); return false;",并配合一个隐藏的 <a> 标签来织梦的点击统计功能。
  5. 缓存问题:修改模板或发布新内容后,如果前台不显示,请去后台“系统”->“性能选项”里清空一下所有缓存。

通过以上步骤,你就成功地为织梦DedeCMS开发了一个功能强大、模板自由的网址导航系统,你可以随心所欲地设计它的外观和布局,并且内容管理也变得非常简单直观。