dede栏目url怎么调用?

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

使用系统内置的 {dede:field} 标签(最推荐)

这是最直接、最常用的方法,通常用在列表页文章页中,用于获取当前栏目的URL。

dede 如何调用栏目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

如果你想在子栏目列表页显示一个返回父栏目的链接,可以使用 typeidtopid 变量结合 GetOneTypeUrl 函数来实现。

dede 如何调用栏目url
(图片来源网络,侵删)

代码示例:

{dede:gettopid typeid='0' function='gettopid(@me)'/}
<a href="{dede:field name='typeid' function='GetOneTypeUrl(@me)'/}">返回上级栏目</a>

代码解析:

  • {dede:gettopid typeid='0' function='gettopid(@me)'/}:这是一个辅助标签,用于获取当前栏目的顶级栏目IDtypeid='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(主导航)

使用 {dede:channel}

代码示例:

dede 如何调用栏目url
(图片来源网络,侵删)
{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}typeidreid 属性。

代码示例:

同级栏目:
{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 灵活性最高,可处理复杂逻辑 代码量多,对新手不友好,有一定安全风险(需注意防注入)

给新手的建议:

  • 90% 的情况下,你只需要用到方法一和方法二。
  • 在列表页或文章页返回当前/上级栏目,用 {dede:field name='typeurl'}GetOneTypeUrl 函数
  • 在首页做导航,循环调用栏目,用 {dede:channel type='top'}

希望这些详细的解释和示例能帮助你完全掌握在DedeCMS中调用栏目URL的方法!

-- 展开阅读全文 --
头像
dede word图片不显示怎么办?
« 上一篇 今天
织梦list标签为何不支持直接调用id?
下一篇 » 今天

相关文章

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