使用系统内置的 {dede:field} 标签(最推荐)
这是最直接、最常用的方法,通常用在列表页和文章页中,用于获取当前栏目的URL。

场景1:在列表页 (list_*.php) 或文章页 (article_*.php) 调用当前栏目的URL
在这种页面,系统已经知道你所在的栏目,可以直接调用。
代码示例:
<a href="{dede:field name='typeurl'/}">返回{dede:field name='typename'/}栏目</a>
代码解析:
{dede:field name='typeurl'/}:这是核心标签,typeurl是DedeCMS预设的变量,直接指向当前栏目的URL地址。{dede:field name='typename'/}:获取当前栏目的名称,让链接文字更清晰。
场景2:在列表页 (list_*.php) 调用上级栏目的URL
如果你想在子栏目列表页显示一个返回父栏目的链接,可以使用 typeid 和 topid 变量结合 GetOneTypeUrl 函数来实现。

代码示例:
{dede:gettopid typeid='0' function='gettopid(@me)'/}
<a href="{dede:field name='typeid' function='GetOneTypeUrl(@me)'/}">返回上级栏目</a>
代码解析:
{dede:gettopid typeid='0' function='gettopid(@me)'/}:这是一个辅助标签,用于获取当前栏目的顶级栏目ID。typeid='0'表示从当前栏目开始查找。{dede:field name='typeid' function='GetOneTypeUrl(@me)'/}:这是核心代码。name='typeid':获取当前栏目的ID。function='GetOneTypeUrl(@me)':这是关键!它调用DedeCMS的底层函数GetOneTypeUrl,并将当前栏目ID (@me) 作为参数传入,从而计算出该ID对应的栏目URL,这个函数非常强大,能正确处理栏目、外部链接等所有类型。
使用 {dede:channel} 和 {dede:type} 标签(循环调用)
当你需要循环输出多个栏目的URL时,比如在首页做一个主导航栏,就需要使用这两个标签。
场景1:在首页或其他页面循环调用一级栏目的URL(主导航)
使用 代码示例: 代码解析: 使用 代码示例: 代码解析: 当 代码示例: 代码解析: 给新手的建议: 希望这些详细的解释和示例能帮助你完全掌握在DedeCMS中调用栏目URL的方法!{dede:channel}

{dede:channel type='top' row='8'}
<a href="[field:typeurl/]">[field:typename/]</a>
{/dede:channel}
{dede:channel type='top' row='8'}:
type='top':表示只调用顶级栏目(一级栏目)。row='8':表示调用8个栏目。[field:typeurl/]:在 {dede:channel} 循环体内,使用方括号 [] 来调用字段。typeurl 同样是栏目URL。[field:typename/]:调用栏目名称。场景2:在子栏目页循环调用同级栏目的URL(面包屑导航旁的兄弟栏目)
{dede:channel} 的 typeid 和 reid 属性。同级栏目:
{dede:channel type='son' typeid='0' currentstyle="<a href='~typelink~' class='thisclass'>~typename~</a>"}
<a href="[field:typeurl/]">[field:typename/]</a>
{/dede:channel}
type='son':表示调用指定栏目的子栏目。typeid='0':这里的 '0' 是一个特殊值,表示调用当前栏目的子栏目,如果你想指定某个栏目,就填入它的ID,如 typeid='5'。currentstyle:一个非常实用的属性,用于给当前栏目所在的链接添加特殊样式(比如高亮)。
使用SQL查询(灵活调用)
{dede:channel} 和 {dede:type} 无法满足复杂需求时,你可以直接执行SQL查询来获取栏目URL,这种方法更灵活,但需要你有一定的SQL基础。场景:根据栏目ID获取任意栏目的URL
{dede:sql sql="SELECT * FROM `dede_arctype` WHERE id = '栏目ID'"}
<a href="[field:typedir function='str_replace("{cmspath}", "", "@me")'/]">[field:typename/]</a>
{/dede:sql}
sql="SELECT * FROMdede_arctypeWHERE id = '栏目ID'":
dede_arctype 是DedeCMS中存储栏目的数据表。WHERE id = '栏目ID' 是查询条件,请将 '栏目ID' 替换为你想查询的实际栏目ID。[field:typedir/]:查询结果中的 typedir 字段存储的是栏目的完整路径,但它包含了 {cmspath} 这样的占位符。function='str_replace("{cmspath}", "", "@me")':我们需要用 str_replace 函数将 {cmspath} 替换成空,得到最终的、可用的URL。@me 代表当前字段的值,即 [field:typedir/] 的内容。
总结与对比
方法
适用场景
优点
缺点
{dede:field name='typeurl'}调用当前栏目的URL
简单、直接、效率高
只能用于已知当前栏目的页面(列表页、文章页)
{dede:channel}循环调用一个或多个栏目的URL
灵活,可控制层级(top, son)和数量
语法相对复杂一点
{dede:type}在文章页调用指定父级栏目的URL
专门用于文章页的层级调用
使用场景较特定
SQL查询
根据任意条件(如ID、名称)获取栏目URL
灵活性最高,可处理复杂逻辑
代码量多,对新手不友好,有一定安全风险(需注意防注入)
{dede:field name='typeurl'} 和 GetOneTypeUrl 函数。{dede:channel type='top'}。
