php,{dede:field name='topid'},
“,,这段代码会输出当前子栏目所属的顶级栏目的ID号。Dedecms子栏目调用获得顶级栏目的ID号的方法
在织梦CMS(DedeCMS)中,获取子栏目的顶级栏目ID号是一项常见的需求,通过自定义函数和修改系统文件,可以实现这一功能,以下是详细的实现步骤:
方法一:使用自定义函数
1、修改extend.helper.php
:
打开include/helpers/extend.helper.php
文件。
在文件末尾添加以下代码:
“`php
if ( ! function_exists(‘gettoptype’)) {
function gettoptype($tid, $action) {
global $dsql, $cfg_Cs;
if (!is_array($cfg_Cs)) {
require_once(DEDEDATA . "/cache/inc_catalog_base.inc");
}
if (!isset($cfg_Cs[$tid][0]) || $cfg_Cs[$tid][0] == 0) {
return "";
} else {
$row = $dsql>GetOne("SELECT * FROM dede_arctype WHERE id=$tid");
return $row[‘topid’];
}
}
}
“`
2、修改common.func.php
:
打开include/common.func.php
文件。
在文件末尾添加以下代码:
“`php
if ( ! function_exists(‘gettoptype’)) {
function gettoptype($tid, $action) {
global $dsql, $cfg_Cs;
if (!is_array($cfg_Cs)) {
require_once(DEDEDATA . "/cache/inc_catalog_base.inc");
}
if (!isset($cfg_Cs[$tid][0]) || $cfg_Cs[$tid][0] == 0) {
return "";
} else {
$row = $dsql>GetOne("SELECT * FROM dede_arctype WHERE id=$tid");
return $row[‘topid’];
}
}
}
“`
3、修改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’ ");
“`
在if (!is_array($row)) return "";
下一行添加:
“`php
if ($row[‘topid’] == 0) {
$row[‘topid’] = $row[‘id’];
}
“`
4、调用顶级栏目ID:
在需要调用顶级栏目ID的地方,添加以下标签:
“`html
{dede:field name=’typeid’ function="gettoptype(@me)"/}
“`
方法二:直接调用标签语法
1、在模板文件中调用:
在需要调用顶级栏目ID的地方,添加以下标签:
“`html
{dede:field.reid/}
“`
这种方法较为简单,但需要确保模板引擎能够正确解析标签。
表格归纳
方法 | 步骤 | 优点 | 缺点 |
自定义函数 | 修改extend.helper.php 、common.func.php 和type.lib.php 文件,添加相应代码 | 灵活性高,适用于复杂场景 | 需要对系统文件进行修改,操作相对复杂 |
标签调用 | 直接在模板文件中使用{dede:field.reid/} 标签进行调用 | 操作简单,易于实现 | 依赖于模板引擎的正确解析,可能存在兼容性问题 |
相关问答FAQs
问题1:如何在文章页调用当前顶级栏目的名称?
答:在文章页调用当前顶级栏目名称,可以在模板文件中使用以下代码:
{dede:field name='typeid' function="GetTopTypename(@me)" /}
GetTopTypename
函数需要在common.func.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']; } }
问题2:如何在栏目列表页调用顶级栏目的URL?
答:在栏目列表页调用顶级栏目的URL,可以在模板文件中使用以下代码:
{dede:field name='typeid' function="GetTopTypeurl(@me)" /}
GetTopTypeurl
函数需要在common.func.php
文件中定义,具体代码如下:
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']; } }
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1099893.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复