如何在DedeCMS 5.7中为任意子栏目获取其顶级栏目的名称和链接?

avatar
作者
猴君
阅读量:0
在dedeCMS5.7中,要获取任意栏目的顶级栏目名称及链接,可以使用以下方法:,,1. 打开include/common.func.php文件,找到GetTopTypeLink($id)函数。,2. 在GetTopTypeLink($id)函数中,添加以下代码:,,``php,function GetTopTypeLink($id, $is_link = true) {, global $dsql;, $row = $dsql>GetOne("SELECT * FROM #@__arctype WHERE id='$id' LIMIT 0,1");, if ($row['pid'] != 0) {, $topid = GetTopTypeLink($row['pid'], false);, } else {, $topid = $id;, }, if ($is_link) {, return '' . $row['typename'] . '';, } else {, return $row['typename'];, },},`,,3. 保存文件并关闭。,4. 在需要显示顶级栏目名称及链接的地方,调用GetTopTypeLink()函数,传入当前栏目的ID作为参数,GetTopTypeLink(10)`。

在DedeCMS 5.7中,获取任意栏目的顶级栏目名称及链接是一项常见需求,以下是实现这一功能的详细步骤和方法:

方法一:通过SQL查询和标签调用

1、使用SQL查询获取数据

如何在DedeCMS 5.7中为任意子栏目获取其顶级栏目的名称和链接?

在模板文件中,可以使用{dede:field.typeid runphp='yes'}标签结合SQL查询来获取顶级栏目的信息。

示例代码如下:

```php

{dede:field.typeid runphp='yes'}

$ID = @me;

$sql = "SELECT * FROMdede_arctype WHERE id=$ID";

$query = mysql_query($sql);

$row=mysql_fetch_array($query);

$relID = "$row[reid]";

if($relID == 0) {

@me = "".$row['typename']."";

$url=$cfg_basehost.$cfg_cmspath;

@me=str_replace('{cmspath}',$url,@me);

}

else {

$sql = "SELECT * FROMdede_arctype WHERE id=$relID";

$query = mysql_query($sql);

$row=mysql_fetch_array($query);

@me = "".$row['typename']."";

$url=$cfg_basehost.$cfg_cmspath;

@me=str_replace('{cmspath}',$url,@me);

}

{/dede:field.typeid}

```

2、解释代码

通过SQL查询获取当前栏目的ID($ID)。

判断当前栏目是否有上级栏目($relID)。

如果没有上级栏目,则直接获取当前栏目的名称和链接。

如果有上级栏目,则继续查询上级栏目的信息,直到找到顶级栏目为止。

方法二:自定义函数调用

1、添加自定义函数

include/common.func.php文件中添加两个自定义函数GetTopTypename()GetTopTypeurl(),用于获取顶级栏目的名称和URL。

示例代码如下:

```php

function GetTopTypename($id){

global $dsql;

$row = $dsql>GetOne("SELECT typename,topid FROM dede_arctype WHERE id= $id");

if ($row['topid'] == '0'){

return $row['typename'];

}else{

$row1 = $dsql>GetOne("SELECT typename FROM dede_arctype WHERE id= $row[topid]");

return $row1['typename'];

}

}

function GetTopTypeurl($id){

global $dsql;

$row = $dsql>GetOne("SELECT sitepath,topid FROM dede_arctype WHERE id= $id");

if ($row['topid'] == '0'){

return $row['sitepath'];

}else{

$row1 = $dsql>GetOne("SELECT sitepath FROM dede_arctype WHERE id= $row[topid]");

return $row1['sitepath'];

}

}

```

2、在模板文件中调用自定义函数

在需要显示顶级栏目名称和URL的地方,使用自定义标签调用这两个函数。

示例代码如下:

```php

{dede:field name='typeid' function="GetTopTypename(@me)" /} 顶级栏目名

{dede:field name='typeid' function="GetTopTypeurl(@me)" /} 顶级栏目url

```

3、解释代码

GetTopTypename($id)函数用于获取指定ID的顶级栏目名称。

GetTopTypeurl($id)函数用于获取指定ID的顶级栏目URL。

在模板文件中,通过{dede:field name='typeid' function="GetTopTypename(@me)" /}标签调用这两个函数,分别显示顶级栏目的名称和URL。

方法三:修改系统文件

1、修改type.lib.php文件

打开include/taglib/type.lib.php文件,找到以下语句:

```php

$row = $dsql>GetOne("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath Fromdede_arctype where id=’$typeid’ “);

```

将该语句修改为:

```php

$row = $dsql>GetOne("Select id,topid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath Fromdede_arctype where id=’$typeid’ “);

```

2、解释修改

通过修改type.lib.php文件,可以在标签系统中增加对顶级栏目ID的支持。

这样,在模板文件中使用{dede:field.typeid function='GetTopid(@me)'/}标签时,可以正确获取顶级栏目的ID、名称和URL。

是在DedeCMS 5.7中获取任意栏目的顶级栏目名称及链接的三种方法,每种方法都有其独特的应用场景和优缺点,可以根据具体需求选择适合的方法来实现功能。

FAQs:

Q1: 如何在列表页调用顶级栏目名称?

A1: 在列表页模板文件中,可以使用以下标签调用顶级栏目名称:

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

这个标签会调用自定义函数GetTopTypename($id),并返回顶级栏目的名称。

Q2: 如何获取当前文章所在栏目的顶级栏目链接?

A2: 在内容查看页模板文件中,可以使用以下标签获取当前文章所在栏目的顶级栏目链接:

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

这个标签会调用自定义函数GetTopTypeurl($id),并返回顶级栏目的URL链接。


Dedecms 5.7 获取顶级栏目名称及链接的方法

DedeCMS是一款功能强大的内容管理系统,版本5.7在之前的版本基础上进行了优化和升级,在DedeCMS 5.7中,获取顶级栏目名称及链接可以通过多种方式实现,以下将详细介绍几种常用的方法。

方法一:使用模型字段获取

1、前提条件

确保顶级栏目已正确设置字段“顶级栏目名称”和“顶级栏目链接”。

2、代码示例

```php

// 获取顶级栏目名称和链接

$channelid = $cid; // 当前栏目ID

$top_channel = $dsql>GetOne("SELECT topid,ARC_Agent,ARC_Agentid FROM#@__channeltype WHERE id = '$channelid'");

$top_channel_name = $top_channel['topid']; // 顶级栏目名称

$top_channel_link = $top_channel['ARC_Agent'] . $top_channel['ARC_Agentid']; // 顶级栏目链接

```

方法二:通过栏目缓存获取

1、前提条件

确保栏目缓存已生成。

2、代码示例

```php

// 获取顶级栏目名称和链接

$channel_cache = $dsql>GetOne("SELECT topid,arcid FROM#@__channeltype WHERE id = '$cid'");

$top_channel_name = $channel_cache['topid']; // 顶级栏目名称

$top_channel_link = $channel_cache['arcid']; // 顶级栏目链接

```

方法三:通过栏目模型获取

1、前提条件

在栏目模型中设置顶级栏目名称和链接的字段。

2、代码示例

```php

// 获取顶级栏目名称和链接

$top_channel_info = $dsql>GetOne("SELECT topid,arcid FROM#@__archives WHERE id = '$aid'"); // $aid为当前文档ID

$top_channel_name = $top_channel_info['topid']; // 顶级栏目名称

$top_channel_link = $top_channel_info['arcid']; // 顶级栏目链接

```

注意事项

确保栏目ID($cid)或文档ID($aid)正确。

确保字段名称与代码中使用的字段名称一致。

在使用模型字段获取时,需要确保模型字段已正确设置。

通过以上方法,可以在DedeCMS 5.7中获取顶级栏目的名称及链接,根据实际情况选择合适的方法,可以有效地实现这一功能。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!