织梦模板开发终极指南 (远超58个技巧)

管理系统是国内使用非常广泛的CMS,其模板引擎使用的是{dede:}标签系统,掌握织梦模板开发,核心在于理解标签、熟悉函数、并学会自定义。

必学 的织梦模板开发58个技巧.doc
(图片来源网络,侵删)

第一部分:基础入门与核心标签 (1-15)

这部分是织梦模板的基石,必须牢固掌握。

  1. 模板文件结构

    • index.html: 网站首页模板。
    • head.html: 公共头部文件,包含<head>、网站导航等。
    • footer.html: 公共底部文件,包含版权信息、友情链接等。
    • article_list.html: 文章列表页模板。
    • article_article.html: 文章内容页模板。
    • search.php: 搜索结果页模板。
    • templets/default/: 默认模板目录。
  2. 模板引擎入口

    • 在所有模板文件的开头,必须加上:
      {dede:global name='cfg_phpurl'/}/templets/system/
    • 这个标签引入了织梦的核心函数库和标签库,没有它,大部分{dede:}标签将无法工作。
  3. 全局变量调用

    必学 的织梦模板开发58个技巧.doc
    (图片来源网络,侵删)
    • 调用网站配置信息:
      • {dede:global name='cfg_webname'/}: 网站名称
      • {dede:global name='cfg_weburl'/}: 网站地址
      • {dede:global name='cfg_powerby'/}: 网页版权信息
      • {dede:global name='cfg_description'/}: 网站描述
  4. 文章列表循环

    • 这是文章列表页的核心,用于循环输出文章。
      {dede:arclist titlelen='30' row='10'}
      <li>
      <a href="[field:arcurl/]">[field:title/]</a>
      <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
      </li>
      {/dede:arclist}
  5. 常用列表字段

    • [field:id/]: 文章ID
    • [field:title/]: 文章标题
    • [field:arcurl/]: 文章链接
    • [field:pubdate/]: 发布时间(时间戳)
    • [field:description/]: 文章摘要
    • [field:litpic/]: 文章缩略图
    • [field:click/]: 点击量
    • [field:typename/]: 所属栏目名称
  6. 时间格式化

    • 使用function属性对时间戳进行格式化。
    • MyDate('Y-m-d H:i:s', @me): 格式为 2025-10-27 15:30:00
    • MyDate('m-d', @me): 格式为 10-27
    • strftime('%Y-%m-%d', @me): 另一种格式化方式。
    • 用于显示单篇文章的详细内容。
      <h1>{dede:field.title/}</h1>
      <div class="info">
      <span>发布时间:{dede:field.pubdate function="MyDate('Y-m-d', @me)"/}</span>
      <span>点击数:{dede:field.click/}</span>
      </div>
      <div class="content">
      {dede:field.body/}
      </div>
  7. 内容页常用字段

    • {dede:field.title/}: 文章标题
    • {dede:field.pubdate/}: 发布时间
    • {dede:field.click/}: 点击量
    • {dede:field.body/}: 文章正文
    • {dede:field.keywords/}: 文章关键词
    • {dede:field.description/}: 文章摘要
  8. 栏目列表循环

    • 用于调用顶级栏目或指定栏目的子栏目。
      {dede:channel type='top' row='8'}
      <li><a href="[field:typelink/]">[field:typename/]</a></li>
      {/dede:channel}
    • type='top': 只调用顶级栏目。
    • type='son' typeid='ID': 调用指定ID栏目的子栏目。
  9. 栏目链接

    • [field:typelink/]: 栏目链接(包含完整的URL)
    • [field:typeurl/]: 栏目链接(与typelink类似,有时表现不同)
  10. 分页标签

    • 在列表页模板中,分页代码是固定的。
      <div class="dede_pages">
      <ul class="pagelist">
          {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}
      </ul>
      </div>
  11. 调用友情链接

    • footer.html等页面常用。
      {dede:flink type='text' row='24'}
      [field:link/]
      {/dede:flink}
    • type='text': 文字链接。type='image': 图片链接。
  12. 调用网站地图

    • 生成网站地图,方便搜索引擎抓取。
      <a href="{dede:global name='cfg_cmsurl'/}/sitemap.html">网站地图</a>
  13. 搜索表单

    • 网站搜索功能的核心表单。
      <form name="formsearch" action="{dede:global name='cfg_phpurl'/}/search.php">
      <input type="hidden" name="kwtype" value="0" />
      <input type="hidden" name="searchtype" id="searchtype" value="titlekeyword" />
      <input name="q" type="text" class="search-keywords" id="search-keywords" placeholder="输入关键词..." />
      <button type="submit">搜索</button>
      </form>
  14. 首页头部和底部引入

    • 使用include标签引入公共文件,是模块化开发的第一步。
      {dede:include filename="head.html"/}
      <!-- 页面主要内容 -->
      {dede:include filename="footer.html"/}

第二部分:进阶技巧与常用功能 (16-35)

掌握了基础后,这些技巧能让你开发出更强大、更灵活的模板。

  1. 自定义字段

    • 在后台“核心”->“内容模型管理”中为模型添加自定义字段(如:价格、品牌、作者简介等)。
    • 页调用:{dede:field.自定义字段名/}
    • 在列表页调用:[field:自定义字段名/]
  2. arclist 高级属性

    • typeid='1,2,3': 指定栏目ID,多个用逗号隔开。
    • row='20': 调用文章数量。
    • titlelen='50': 标题长度。
    • infolen='200':摘要长度。
    • orderway='desc': 排序方式,desc降序,asc升序。
    • orderby='pubdate': 按发布时间排序。click按点击量排序。
  3. 调用指定栏目下的文章

    • typeid属性是arclist的灵魂。
      <!-- 调用ID为5的栏目下的10篇文章 -->
      {dede:arclist typeid='5' row='10'}
      ...
      {/dede:arclist}
  4. 调用当前栏目的子栏目

    • 在列表页或内容页,非常有用。
      {dede:channel type='son' currentstyle="<li class='on'><a href='~typelink~'>~typename~</a></li>"}
      <li><a href="[field:typelink/]">[field:typename/]</a></li>
      {/dede:channel}
    • currentstyle: 为当前栏目指定高亮样式。
  5. 调用当前栏目的顶级栏目

    • 用于面包屑导航或当前位置。
      {dede:field name='typename'/} <!-- 当前栏目 -->
      {dede:field name='topid' runphp='yes'}
      $dsql = new DedeSql(false);
      $typeid = @me;
      $arr = $dsql->GetOne("SELECT typename,reid,topid FROM `dede_arctype` WHERE id=$typeid");
      $topid = $arr['topid'];
      $topid = $topid == 0 ? $typeid : $topid;
      $row = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id=$topid");
      @me = $row['typename'];
      {/dede:field}
  6. 面包屑导航

    • 织梦内置了面包屑标签。
      <a href="{dede:global name='cfg_cmsurl'/}/">首页</a>
      {dede:field name='position'/}
  7. 上一篇/下一篇

    • 页常用。
      <div class="prenext">
      <p>上一篇:{dede:prenext get='pre'/}</p>
      <p>下一篇:{dede:prenext get='next'/}</p>
      </div>
  8. 相关文章

    • 根据关键词或当前栏目调用相关文章。
      {dede:likeart titlelen='24' row='10'}
      <li><a href="[field:arcurl/]">[field:title/]</a></li>
      {/dede:likeart}
  9. 评论调用

    • 在首页或列表页调用最新评论。
      {dede:feedback row='5' titlelen='24'}
      <li><a href="[field:phpurl/]/plus/feedback.php?aid=[field:aid/]">[field:msg/]</a> ([field:username/])</li>
      {dede:feedback}
  10. 幻灯片/焦点图

    • 使用arclist结合特定样式实现。
      {dede:arclist row='5' type='image.' imgwidth='300' imgheight='220'}
      <a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]" width="300" height="220" /></a>
      {/dede:arclist}
    • type='image.' 表示只调用有缩略图的文章。
  11. 内容页分页

    • 页,如果内容很长,需要分页。
      {dede:pagebreak/}
    • 在后台发布文章时,使用<!----->标记进行手动分页。
  12. 调用特定栏目(非顶级)

    • 直接使用typeid即可,不限定type属性。
  13. 优化

    • 使用{dede:pagelist/}listitem属性可以显示“共X页”等信息,用于SEO。
    • 更推荐使用PHP代码动态生成标题。
      {dede:field.title/}_栏目名称_网站名称
  14. 内容页图片集

    • 对于图片模型,使用{dede:field.body/}会默认只显示第一张图,需要使用特定标签循环输出。
      {dede:field.body/}
      <!-- 在后台内容模型-字段管理中,将body字段的“内容详细样式模板”修改为以下代码 -->
      <div class="pics">
      {dede:img maxwidth='500' maxheight='375'}
      <a href="[field:imgsrc/]" target="_blank"><img src="[field:imgsrc/]" alt="[field:text/]" /></a>
      {/dede:img}
      </div>
  15. 使用PHP代码

    • 在模板中直接使用PHP代码,实现更复杂的功能。
    • 语法:
      {dede:name runphp='yes'}
          $abc = "Hello World";
          @me = $abc; // @me 代表标签本身的值
      {/dede:name}
    • 示例:获取当前栏目ID。
      {dede:field.typeid runphp='yes'}
          @me = "当前栏目ID是:".@me;
      {/dede:field.typeid}
  16. 调用子栏目及其文章

    • 嵌套循环,先循环子栏目,再循环每个子栏目下的文章。
      {dede:channel type='son' typeid='5'}
      <h2>[field:typename/]</h2>
      <ul>
          {dede:arclist row='5' titlelen='24' channelid='[field:id]'}
          <li><a href="[field:arcurl/]">[field:title/]</a></li>
          {/dede:arclist}
      </ul>
      {/dede:channel}
  17. 列表页高亮当前栏目

    • 结合dede:channelcurrentstyle属性。
  18. 调用TAG标签

    • 页或列表页调用文章的TAG。
      {dede:tag sort='new' getall='0'}
      <a href="[field:link/]">[field:tag/]</a>
      {dede:tag}
  19. 内容页缩略图

    • 如果文章没有缩略图,可以显示一张默认图片。
      [field:litpic runphp='yes']
      if(@me == '') {
          @me = '/default/images/nopic.jpg';
      }
      [/field:litpic]
  20. 利用SQL标签

    • 当内置标签无法满足需求时,可以直接执行SQL查询。
    • 注意: 有一定的安全风险,务必做好过滤。
      {dede:sql sql='SELECT * FROM `dede_archives` ORDER BY pubdate DESC LIMIT 10'}
      <li><a href="[field:arcurl/]">[field:title/]</a></li>
      {/dede:sql}

第三部分:高级应用与性能优化 (36-58+)

能让你成为织梦开发高手,解决复杂问题并提升网站性能。

  1. 创建自定义模型

    后台“核心”->“内容模型管理”->“增加一个内容模型”,可以创建产品、下载、软件等模型,并为它们创建独立的模板。

  2. 自定义模板文件

    • 在模型管理中,可以为每个模型指定不同的列表页模板(如 product_list.html页模板(如 product_article.html)。
  3. JS调用

    • 通过JS方式输出,方便其他网站或前端框架调用。
    • 在模板文件开头加上{dede:config.savephpname=''/},然后创建一个.js如下:
      <?php
      $pv->Fields['typename'] = $this->TypeLink->TypeInfos['typename'];
      echo "document.write('".$pv->GetTempletsVar('list', 'default/list_article.htm')."');";
      ?>
    • 在其他页面引入:<script src="{dede:global name='cfg_cmsurl'/}/js/your_file.js"></script>
  4. 修改上传目录

    后台“系统”->“基本参数”->“附件设置”,可以修改上传目录,避免与系统文件混淆。

  5. 使用dede标签制作幻灯片

    • 除了arclist,还可以使用{dede:flink/}{dede:loop/}等标签,配合CSS和JS制作更复杂的幻灯片。
  6. 利用<link>标签引入CSS/JS

    • head.html中,使用<link><script>标签引入外部资源,而不是内联,可以提高加载速度。
  7. CSS和JS文件压缩

    使用工具(如 Gulp, Grunt)或在线工具将CSS和JS文件进行压缩,减少文件体积。

  8. 开启静态化

    后台“系统”->“系统设置”->“核心设置”,将“是否使用伪静态”或“生成HTML页”设置为“是”,能极大提升网站访问速度和SEO友好度。

  9. 生成栏目页

    在后台“生成”->“一键更新所有”中,可以单独生成栏目页,更新栏目信息。

  10. 批量更新网站

    “一键更新所有”功能,可以按顺序更新首页、栏目、内容、自定义等。

  11. 使用dede:loop循环任意表

    • loop标签比sql标签更灵活,可以循环指定数据表中的任意字段。
      {dede:loop table='dede_archives' sort='pubdate' row='10'}
      <li><a href="[field:arcurl/]">[field:title/]</a></li>
      {/dede:loop}
  12. 内容页获取当前栏目ID

    • {dede:field.typeid/}
  13. 内容页获取顶级栏目ID

    见第20条,使用PHP代码。

  14. 制作多语言网站

    可以通过建立多个栏目(如“中文”、“English”),每个栏目对应一套模板,或者使用自定义字段存储不同语言内容。

  15. 修改分页样式

    • /include/arc.listview.class.php文件中,找到GetPageListST函数,可以修改分页的HTML输出结构,以匹配你的CSS。
  16. 调用指定会员发布的文章

    • 使用sql标签,通过mid字段筛选。
      {dede:sql sql="SELECT * FROM `dede_archives` WHERE mid=1 ORDER BY pubdate DESC LIMIT 10"}
      ...
      {/dede:sql}
  17. 制作专题页面

    • 后台“专题管理”可以创建专题,并为专题指定模板,专题模板中可以使用{dede:arclist}调用专题内的文章。
  18. 利用缓存

    • 织梦自带缓存机制,对于不经常变化的区块(如导航栏、热门文章),可以在后台开启全局缓存,或在标签中使用cache='3600'属性(单位:秒)。
      {dede:arclist row='10' cache='3600'}
      ...
      {/dede:arclist}
  19. 自定义错误页面

    • /templets/system/目录下,可以修改error.htm模板,自定义404、500等错误页面。
  20. 使用dede:include引入远程文件

    • include标签支持引入远程文件,可用于共享导航或广告位。
      {dede:include url='http://www.example.com/nav.html' isapi='yes'/}
  21. SEO优化技巧

    • {dede:global name='cfg_webname'/}_{dede:field.title/} (首页), {dede:field.title/}_{dede:field.typename/}_{dede:global name='cfg_webname'/} (栏目/内容页)
    • <meta name="keywords" content="{dede:field.keywords/}" />
    • 描述: <meta name="description" content="{dede:field.description function='html2text(@me)'/}" /> (用html2text函数过滤掉HTML标签)
  22. 调试技巧

    • 如果标签不生效,首先检查{dede:global name='cfg_phpurl'/}/templets/system/是否已引入。
    • 使用浏览器的“开发者工具”查看网络请求和HTML源码,确认标签是否被正确解析。
    • 对于PHP代码,可以print_r()var_dump()变量来查看其值。
  23. 代码规范与注释

    • 保持HTML、CSS、PHP代码的缩进和格式清晰。
    • 在复杂的逻辑块或自定义函数前添加注释,方便后期维护。

第四部分:总结与最佳实践

  • 模块化思维: 尽量使用{dede:include/}将公共部分(头、尾、导航、侧边栏)拆分成独立文件。
  • 命名规范: 为模板文件、CSS类名、JS函数名使用有意义的、统一的命名。
  • 安全第一: 任何时候都不要直接信任用户输入,在自定义SQL或使用PHP代码时,务必对变量进行过滤和转义。
  • 版本控制: 使用Git等工具管理你的模板代码,以防误操作导致文件丢失。
  • 备份: 在修改核心文件(如.class.php)前,务必备份原文件。
  • 学习官方文档: 织梦官方论坛和文档是解决问题的第一手资料。
  • 拥抱原生PHP: 当织梦标签的灵活性达到极限时,不要害怕直接在模板中写PHP代码,这能解决绝大多数复杂问题。

这份指南涵盖了织梦模板开发的绝大部分核心知识点和实用技巧,真正的“58个技巧”来源于您在实践中的不断摸索和总结,希望这份详尽的文档能成为您开发路上的得力助手!