织梦DEDECMS文章、栏目页获取当前页面顶级栏目名称的方法
在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称。
下面拓展出一个方法来实现这个效果:
方法一:
在include/common.func.php的最下方加入:
01
//获取顶级栏目名
02
function GetTopTypename($id)
03
{
04
global $dsql;
05
$row = $dsql->GetOne("SELECT typename,topid FROM dede_arctype WHERE id= $id");
06
if ($row['topid'] == '0')
07
{
08
return $row['typename'];
09
}
10
else
11
{
12
$row1 = $dsql->GetOne("SELECT typename FROM dede_arctype WHERE id= $row[topid]");
13
return $row1['typename'];
14
}
15
}
在文章页或者栏目列表页调用时,在所要调用 名称的位置加上下面这行代码即可实现。
1
{dede:field name='typeid' function="GetTopTypename(@me)" /}
在文章页中用下面这个方法来调用
1
{dede:field name='typeid' function="GetTopTypename(@me) /}
方法二:
修改 include/helpers/extend.helper.php
结尾增加 :
01
/* 获取顶级栏目相关信息
02
*
03
* @access public
04
* @param string $tid 栏目id
05
* @param string $field栏目字段
06
* @return string
07
*/
08
if ( ! function_exists('getToptype'))
09
{
10
function getToptype($tid,$field)
11
{
12
global $dsql,$cfg_Cs;
13
if(!is_array($cfg_Cs))
14
{
15
require_once(DEDEDATA."/cache/inc_catalog_base.inc");
16
}
17
if(!isset($cfg_Cs[$tid][0]) || $cfg_Cs[$tid][0]==0)
18
{
19
$topid = $tid;
20
}
21
else
22
{
23
$topid = GetTopid($cfg_Cs[$tid][0]);
24
}
25
$row = $dsql->GetOne("SELECT * FROM `dede_arctype` WHERE id=$topid");
26
if($field=='id') return $topid;
27
if($field=='typename') return $row['typename'];//栏目名称
28
if($field=='typeurl') return GetOneTypeUrlA($row);//栏目链接
29
if($field=='typenamedir') return $row['typenamedir'];//栏目英文名称
30
if($field=='seotitle') return $row['seotitle'];//栏目SEO标题
31
if($field=='description') return $row['description'];//栏目描述
32
if($field=='content') return $row['content'];//栏目内容
33
}
34
}
调用:
1
{dede:field.typeid function="gettoptype(@me,typename)"/} //栏目名称
1
{dede:field.typeid function="gettoptype(@me,typeurl)"/} //栏目链接
一次类推,怎么写可以观察php上面的定义!
发表评论 取消回复