织梦模板更新后如何修改typeid?

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

这是一个非常常见的需求,通常分为两种情况:

织梦 模板更新 修改typeid
(图片来源网络,侵删)
  1. 修改已有模板中的 typeid:比如你换了个栏目,或者想在新模板里指向不同的栏目。
  2. 在全新模板中正确使用 typeid:特别是当模板涉及到“当前栏目”、“父栏目”或“顶级栏目”时,新手很容易出错。

理解 typeid 是什么?

typeid 是织梦模板引擎中的一个核心变量,它的作用是的数据来源,它通常用在标签中,告诉织梦:“请从这个ID为 typeid 的栏目里获取内容”。

typeid 的值通常是一个数字,对应 dede_arctype 表(栏目表)中的 id 字段。


场景一:修改现有模板中的 typeid

当你拿到一个新模板,或者想调整现有模板的栏目指向时,就需要修改 typeid

修改固定栏目的 typeid

这是最简单直接的情况,你的模板里有一个“公司新闻”的板块,你想让它显示ID为 5 的栏目内容。

织梦 模板更新 修改typeid
(图片来源网络,侵删)

操作步骤:

  1. 找到 typeid 的位置: 登录你的网站后台,进入【模板】->【模板管理】,找到你正在使用的模板文件(index.htm 首页,list_article.htm 列表页,article_article.htm 内容页等)。 点击对应的【修改】按钮,进入模板代码编辑界面。

  2. 定位相关标签: 在模板代码中搜索 typeid,你通常会找到类似下面的标签:

    • 栏目列表标签 (arclist)

      织梦 模板更新 修改typeid
      (图片来源网络,侵删)
      {dede:arclist typeid='5' titlelen='24' row='10'}
      <li>
          <a href="[field:arcurl/]">[field:title/]</a>
          <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
      </li>
      {/dede:arclist}
    • 栏目频道标签 (channel)

      {dede:channel typeid='5' type='son'}
      <li><a href="[field:typeurl/]">[field:typename/]</a></li>
      {/dede:channel}
  3. 修改 typeid 的值: 将 typeid='5' 中的数字 5 修改为你目标栏目的ID

    如何找到栏目的ID?

    • 进入后台【核心】->【栏目管理】。
    • 将鼠标悬停在你想要修改的栏目名称上,浏览器左下角的状态栏会显示该栏目的ID,.../catalog_do.php?dopost=edit&channelid=1&cid=5,这里的 cid=5 就是栏目的ID。
    • 或者直接点击【栏目管理】,在列表中查看“栏目名称”旁边的ID数字。
  4. 更新并生成

    • 在模板编辑器中修改代码后,点击【保存】。
    • 进入【生成】->【更新主页HTML】或【更新栏目HTML】/【更新文档HTML】,让修改生效。

修改动态获取的 typeid (重要!)

在列表页 (list_article.htm) 和内容页 (article_article.htm) 中,typeid 通常不是写死的,而是通过 {dede:field name='typeid'/} 自动获取当前栏目的ID。

这种情况下,你通常不需要修改 typeid 本身,而是要确保它指向正确的栏目。

  • 在列表页 (list_article.htm){dede:field name='typeid'/} 会自动获取当前列表页面对应的栏目ID,你只需要在后台确保这个列表页面对应的是正确的栏目即可。一般不需要在模板里动它。

  • 页 (article_article.htm): 同样,{dede:field name='typeid'/} 会自动获取当前文章所在栏目的ID。一般也不需要修改。

什么时候需要修改这种动态 typeid页里调用当前栏目的父栏目顶级栏目时,就需要用到 typeid 的“父级”和“顶级”用法。


场景二:在模板中高级使用 typeid

这是模板修改的精髓,能让你做出非常灵活的布局。

调用子栏目

如果你想在某个栏目页里显示它所有直接子栏目的列表,可以使用 channel 标签,并将 typeid 设为当前栏目ID,同时加上 type='son'

模板代码示例 (在 list_article.htm 中):

<h2>子栏目列表</h2>
<ul>
    {dede:channel type='son'}
    <li>
        <a href="[field:typeurl/]">[field:typename/]</a>
    </li>
    {/dede:channel}
</ul>

这里的 {dede:field name='typeid'/} 是被省略的,默认就是当前栏目,如果你想明确写出,也可以:

{dede:channel typeid='{dede:field.name='typeid'/}' type='son'}
...
{/dede:channel}

调用顶级栏目

有时,你可能需要一个“全局”的栏目导航,无论在哪个子栏目下,都只显示顶级栏目。

模板代码示例 (可在首页或任何页面使用):

<h2>全站顶级栏目</h2>
<ul>
    {dede:channel type='top'}
    <li>
        <a href="[field:typeurl/]">[field:typename/]</a>
    </li>
    {/dede:channel}
</ul>

这里 typeid 被省略,type='top' 告诉织梦忽略 typeid,直接从数据库获取所有顶级栏目。

调用父栏目

如果你想在子栏目页里显示它的直接父栏目信息(比如面包屑导航),可以使用 gettopid 函数。

模板代码示例 (在子栏目列表页或内容页中):

{dede:field name='typeid' function='gettopid(@me)'/}

这段代码的作用是:获取当前栏目ID({dede:field.name='typeid'/}),然后通过 gettopid 函数计算出它的顶级栏目ID。

如果想获取直接父栏目ID,需要自定义一个函数,或者使用更复杂的方法,但 gettopid 是最常用的。


模板更新后,typeid 不生效的常见原因及解决方法

  1. 未更新缓存或生成HTML

    • 原因:修改了模板文件,但织梦的缓存或生成的静态文件没有更新。
    • 解决:进入后台【生成】菜单,依次点击【更新主页HTML】、【更新栏目HTML】、【更新文档HTML】,如果网站是动态的,也要进入【系统】->【系统基本参数】->【性能选项】,清空所有缓存。
  2. 栏目ID错误或栏目已删除

    • 原因:你填写的 typeid 对应的栏目不存在或ID已改变。
    • 解决:再次核对【栏目管理】中的栏目ID,确保 typeid 的值正确无误。
  3. 标签嵌套或语法错误

    • 原因:在修改 typeid 时,不小心破坏了标签的语法,比如引号不匹配、标签未闭合等。
    • 解决:仔细检查模板代码,确保 {dede:tag}{/dede:tag} 成对出现,引号( 或 )正确闭合。
  4. 权限问题

    • 原因:服务器上文件权限设置不当,导致模板文件无法被保存或覆盖。
    • 解决:通过FTP连接服务器,将模板文件(位于 /templets/default/ 或你自定义的目录)的权限设置为 644664,目录权限设置为 755775
需求场景 解决方案 关键标签/代码
指向固定栏目 在模板中找到 typeid,将其值修改为目标栏目的ID。 typeid='15'
显示当前栏目内容 使用 {dede:field name='typeid'/} 自动获取,无需手动修改。 {dede:arclist row='10'} (省略typeid)
显示当前栏目的子栏目 使用 channel 标签,并设置 type='son' {dede:channel type='son'}
显示全站顶级栏目 使用 channel 标签,并设置 type='top' {dede:channel type='top'}
获取顶级栏目ID 页或列表页中使用函数。 {dede:field name='typeid' function='gettopid(@me)'/}
修改后不生效 清空缓存并重新生成网站。 后台【生成】菜单

希望这份详细的指南能帮助你顺利完成织梦模板的 typeid 修改工作!如果在操作中遇到具体问题,可以提供更详细的错误信息或模板代码,我可以进一步帮你分析。

-- 展开阅读全文 --
头像
织梦common.inc.php有何关键配置与安全要点?
« 上一篇 2025-12-13
谭浩强C语言第二版课后答案哪里有?
下一篇 » 2025-12-13

相关文章

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

目录[+]