织梦如何调用父栏目ID?

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

我将为您详细解释,并提供最常用、最核心的代码示例。

织梦调用父栏目 id
(图片来源网络,侵删)

核心方法:使用 {dede:field}

这是最直接、最常用的方法,在文章页(article_article.htm)或列表页(list_*.htm)中,当前内容所在的栏目ID可以通过 {dede:field typeid/} 获取,而这个栏目本身,也有一个它所属的父栏目ID,我们可以通过 typeidtopid 属性来获取。

页(article_article.htm)中调用父栏目ID

在文章页,当前文章属于哪个栏目,这个栏目的ID就是 {dede:field typeid/},要获取这个栏目的父栏目ID,使用以下代码:

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

代码解析:

  • {dede:field typeid/}:获取当前文章所在栏目的ID。
  • function='GetTopid(@me)':这是一个自定义函数调用。
    • @me:代表 {dede:field typeid/} 的值,也就是当前栏目的ID。
    • GetTopid():这是织梦系统自带的一个核心函数,它的作用是根据一个栏目ID,返回其顶级父栏目的ID
    • 重要提示:如果当前栏目本身就是顶级栏目(没有父栏目),GetTopid() 函数返回的值就是它自身的ID,如果你需要判断是否为顶级栏目,可以结合PHP代码来实现。

完整示例(在文章页模板中):

假设你想在文章页显示当前栏目的父栏目名称,并链接到父栏目列表页。

<h2>当前位置:</h2>
您的文章属于栏目:<a href="{dede:field name='typeid' function='GetTopid(@me)'/}">{dede:field name='typename'/}</a>
<br>
它的父栏目ID是:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong>
<br>
它的父栏目名称是:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong>  <!-- 注意:这样写是错的,下面会解释如何正确获取父栏目名称 -->

在栏目列表页(list_*.htm)中调用父栏目ID

在列表页,逻辑和文章页完全一样,当前列表页所代表的栏目ID就是 {dede:field typeid/},调用父栏目ID的方法也是相同的。

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

完整示例(在列表页模板中): 上方显示父栏目的信息。

<div class="breadcrumb">
    当前栏目列表 - <a href="{dede:global.cfg_cmsurl/}/">{dede:global.cfg_webname/}</a>
    > <a href="{dede:type typeid='0'}[field:typelink/]{/dede:type}">顶级栏目</a> <!-- 这只是一个示例,下面有更好的方法 -->
    > 父栏目ID:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong>
</div>

进阶用法与常见问题

如何获取父栏目的名称和链接?

上面的方法只能获取父栏目的ID,如果我们想获取父栏目的名称链接,就需要使用嵌套的 {dede:type}

方法:先获取父栏目ID,再用 {dede:type} 根据ID获取信息

{dede:field typeid function='GetTopid(@me)'}
    {dede:type id='@me'}
        父栏目名称:<a href="[field:typelink/]">[field:typename/]</a>
    {/dede:type}
{/dede:field}

代码解析:

  1. {dede:field typeid function='GetTopid(@me)'}:这部分执行后,会输出父栏目的ID,在 {dede:type} 标签中,这个ID会被作为 id 属性的值。
  2. {dede:type id='@me'}{dede:type} 标签可以根据指定的 id 来获取一个栏目的信息。
    • id='@me':这里的 @me 指代的是外层 {dede:field} 标签的输出结果,也就是我们刚刚获取到的父栏目ID。
  3. [field:typelink/][field:typename/]:这是 {dede:type} 标签内的底层字段,分别代表栏目的链接和名称。

更简洁的写法(PHP代码块):

如果你对PHP比较熟悉,在模板中直接写PHP代码会更灵活和高效。

<?php
    // 1. 获取当前栏目的ID
    $current_typeid = $typeid;
    // 2. 获取当前栏目的信息,从中得到父栏目ID
    $current_type = GetOneType($current_typeid);
    $parent_typeid = $current_type['topid']; // 'topid' 就是顶级父栏目的ID
    // 3. 如果父栏目ID不等于当前栏目ID(说明不是顶级栏目),则获取父栏目信息
    if ($parent_typeid != $current_typeid) {
        $parent_type = GetOneType($parent_typeid);
        echo "父栏目名称:<a href='".$parent_type['typedir']."'>".$parent_type['typename']."</a>";
    } else {
        echo "本栏目就是顶级栏目。";
    }
?>

这种方法更可控,可以处理各种边界情况,比如判断是否为顶级栏目。

如何获取直接父栏目的ID,而不是顶级父栏目?

织梦默认的 GetTopid() 函数只能获取顶级父栏目,如果业务需求是获取上一级父栏目(直接父栏目),则需要使用PHP代码。

在文章页或列表页模板中添加以下PHP代码:

<?php
    // 获取当前栏目的完整信息
    $this_type = GetOneType($typeid);
    // 'reid' 字段存储的就是直接父栏目的ID
    $parent_typeid = $this_type['reid'];
    // 如果存在直接父栏目
    if ($parent_typeid > 0) {
        // 获取直接父栏目的信息
        $parent_type = GetOneType($parent_typeid);
        echo "直接父栏目ID: " . $parent_typeid . "<br>";
        echo "直接父栏目名称: <a href='".$parent_type['typedir']."'>".$parent_type['typename']."</a>";
    } else {
        echo "本栏目是顶级栏目,没有直接父栏目。";
    }
?>

GetOneType() 函数返回的栏目信息数组常用字段:

  • idtypeid:栏目自身ID。
  • typename:栏目名称。
  • typedir:栏目链接。
  • reid直接父栏目ID
  • topid顶级父栏目ID
需求 代码 适用场景
获取顶级父栏目ID {dede:field typeid function='GetTopid(@me)'/} 文章页、列表页
获取直接父栏目ID <?php $this_type = GetOneType($typeid); echo $this_type['reid']; ?> 文章页、列表页
获取顶级父栏目名称和链接 {dede:field typeid function='GetTopid(@me)'}{dede:type id='@me'}[field:typename/] - [field:typelink/]{/dede:type}{/dede:field} 文章页、列表页
获取直接父栏目名称和链接 <?php $this_type = GetOneType($typeid); if($this_type['reid']>0){$p_type=GetOneType($this_type['reid']); echo $p_type['typename'];} ?> 文章页、列表页

希望这份详细的解释能帮助您在织梦开发中灵活地调用父栏目信息!

-- 展开阅读全文 --
头像
织梦怎么更新全站缓存
« 上一篇 今天
dede 上传图片js
下一篇 » 今天

相关文章

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