TrueInfos($info)
标题:调用上级栏目名称和链接的方法
在DedeCMS系统中,调用当前栏目的上级栏目名称和链接是常见的需求,以下是一些有效的方法来实现这一功能:
调用上级栏目名称
1、使用PHP代码:
可以在模板标签中嵌入PHP代码来调用上级栏目的名称,具体代码如下:
{dede:field name='position' runphp='yes'} $tc=""; //分隔符 $tw=$GLOBALS['cfg_list_symbol']; //调用位置分隔符 $tf=split($tw,@me); //分解成数组 $ta=1; $tk=trim($tf[$ta]); $tk=substr($tk,0); @me=$tk; //赋值给@me {/dede:field}
另一种方法是通过直接查询数据库来获取上级栏目的名称:
{dede:field.reid runphp='yes'}global $dsql;$reid = @me;$query = "SELECT * FROM#@__arctype
where id =$reid ";$dsql>Execute('a', $query);$arctype = $dsql>GetObject('a');@me = $arctype>typename;{/dede:field.reid}
2、修改include文件:
在include文件夹中找到common.func.php文件,并在底部添加以下代码:
function GetTopTypename($id) { global $dsql; $row = $dsql>GetOne("SELECT typename,topid FROM dede_arctype WHERE id= $id"); return $row['typename']; }
在需要调用顶级栏目的地方使用以下代码:
{dede:field.typeid runphp='yes'}global $GetTopTypename;echo GetTopTypename(@me);{/dede:field.typeid}
3、自动获取上级栏目的标题、关键字、描述:
打开/include/typelink.class.php文件,找到并修改以下代码段:
$this>TypeInfos = $this>dsql>GetOne($query);
在其下面添加三行代码:
$this>TypeInfos['keywords'] = $this>TypeInfos['keywords'] ? $this>TypeInfos['keywords'] : $this>GetTrueInfos('keywords'); $this>TypeInfos['seotitle'] = $this>TypeInfos['seotitle'] ? $this>TypeInfos['seotitle'] : $this>GetTrueInfos('seotitle'); $this>TypeInfos['description'] = $this>TypeInfos['description'] ? $this>TypeInfos['description'] : $this>GetTrueInfos('description');
添加一个调用方法GetTrueInfos($info):
function GetTrueInfos($info) { $infos = array('reid'=>$this>TypeID,$info=>''); while(empty($infos[$info]) && $infos['reid']!=0) { $this>dsql>SetQuery("SELECT reid,".$info." FROM idea_arctype WHERE id='".$infos['reid']."'"); $infos = $this>dsql>GetOne(); } return empty($infos[$info]) ? '' : $infos[$info]; }
调用上级栏目链接
1、使用频道模型函数:
可以通过频道模型函数来调用上级栏目的链接,具体代码如下:
{dede:field name='position' runphp='yes'} $tc=""; //分隔符 $tw=$GLOBALS['cfg_list_symbol']; //调用位置分隔符 $tf=split($tw,@me); //分解成数组 $ta=1; $tk=trim($tf[$ta]); $tk=substr($tk,0,2); @me=$tk; //赋值给@me {/dede:field}
另一种方法是通过直接查询数据库来获取上级栏目的链接:
{dede:field.reid runphp='yes'}global $dsql;$reid = @me;$query = "SELECT * FROM#@__arctype
where id =$reid ";$dsql>Execute('a', $query);$arctype = $dedu>GetObject('a');@me = str_replace('{cmspath}','',$arctype>typedir);{/dede:field.reid}
2、使用自定义模板标签:
可以创建一个新的模板标签来实现调用父类或其他平行子类的内容,具体代码如下:
<?php /** * 父分类内容调用标签 * 用于调用父类或其他平行子类的内容,标签中可使用self参数进行设置是否包含父类自身,1为包含,0为不选,默认为0 * 模板可用字段与arclist一致可用的参数 * row : 调用数量 * titlenlen : 标题长度 * infolen : 摘要长度 * orderby : 排序字段,rand为随机排序 * orderby : 排列顺序,asc升序、desc降序,当orderby为rand时此参数无效 * self : 是否包含父类自身实例 * {dede:parentlist row='10' titlelen='34'} * <li><span>[field:pubdate function="MyDate('md', @me)"/]</span> <a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></li> * {/dede:parentlist} */ if (!defined('DEDEINC'))exit('Request Error!'); function lib_parentlist(&$ctag, &$refObj) { // 省略具体实现代码... }
表格归纳
方法 | 代码示例 | 说明 |
使用PHP代码调用上级栏目名称 | “php{dede:field name='position' runphp='yes'}$tc="";$tw=$GLOBALS['cfg_list_symbol'];$tf=split($tw,@me);$ta=1;$tk=trim($tf[$ta]);$tk=substr($tk,0);@me=$tk;{/dede:field} “ | 通过PHP代码解析栏目层级关系 |
修改include文件 | “php function GetTopTypename($id){global $dsql;$row=$dsql>GetOne("SELECT typename,topid FROM dede_arctype WHERE id= $id");return $row['typename'];}$this>TypeInfos['keywords']=$this>TypeInfos['keywords']?$this>TypeInfos['keywords']:$this>GetTrueInfos('keywords');$this>TypeInfos['seotitle']=$this>TypeInfos['seotitle']?$this>TypeInfos['seotitle']:$this>GetTrueInfos('seotitle');$this>TypeInfos['description']=$this>TypeInfos['description']?$this>TypeInfos['description']:$this>GetTrueInfos('description');function GetTrueInfos($info){...} “ | 在include文件中增加函数实现自动获取上级栏目信息 |
使用频道模型函数 | “php{dede:field name='position' runphp='yes'}$tc="";$tw=$GLOBALS['cfg_list_symbol'];$tf=split($tw,@me);$ta=1;$tk=trim($tf[$ta]);$tk=substr($tk,0,2);@me=$tk;{/dede:field} “ | 通过频道模型函数实现上级栏目信息的调用 |
使用自定义模板标签 | “php{dede:parentlist row='10' titlelen='34'}
“ | 通过自定义模板标签实现上级栏目内容的调用 |
FAQs
1、如何在DedeCMS中调用当前顶级栏目的名称?:要在DedeCMS中调用当前顶级栏目的名称,可以使用以下代码:“php{dede:field.typeid runphp='yes'}{global $dsql;$reid = @me;$query = "SELECT * FROM
#@__arctype where id =$reid ";$dsql>Execute('a', $query);$arctype = $dsql>GetObject('a');@me = $arctype>typename;}{/dede:field.typeid}
`这段代码通过查询数据库表
#@__arctype`来获取顶级栏目的名称。
2、如何在DedeCMS中调用上级栏目的链接?:要在DedeCMS中调用上级栏目的链接,可以使用以下代码:“php{dede:field.reid runphp='yes'}{global $dsql;$reid = @me;$query = "SELECT * FROM
#@__arctype where id =$reid ";$dsql>Execute('a', $query);$arctype = $dsql>GetObject('a');@me = str_replace('{cmspath}','',$arctype>typedir);}{/dede:field.reid}
`这段代码通过查询数据库表
#@__arctype`来获取上级栏目的链接,并将其中的路径替换为相对路径。
方法 | 描述 | 示例代码 |
{ field=typename,arearcats=1, linkage=1,orderby=sortorder } | 获取上级栏目的名称 | { field=typename,arearcats=1, linkage=1,orderby=sortorder } 将返回当前栏目的上级栏目的名称 |
{ field=arearcats, linkage=1, orderby=sortorder } | 获取上级栏目的ID | { field=arearcats, linkage=1,orderby=sortorder } 将返回当前栏目的上级栏目的ID |
{ field=arearcats, linkage=1, orderby=sortorder, type=1 } | 获取上级栏目的所有信息 | { field=arearcats, linkage=1,orderby=sortorder, type=1 } 将返回当前栏目的上级栏目的所有信息,包括名称、ID等 |
{ field=typename, arearcats=1, linkage=1, linkflag=1, linktype=1, orderby=sortorder } | 获取上级栏目的链接地址 | { field=typename, arearcats=1, linkage=1, linkflag=1, linktype=1,orderby=sortorder } 将返回当前栏目的上级栏目的链接地址 |
{ field=arearcats, linkage=1, orderby=sortorder, type=1, infolen=50 } | 获取上级栏目的简介 | { field=arearcats, linkage=1,orderby=sortorder, type=1, infolen=50 } 将返回当前栏目的上级栏目的简介,长度为50字符 |
表格展示了使用dede调用上级栏目的方法,包括获取名称、ID、信息、链接地址和简介等,可以根据实际需求选择合适的方法。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1189623.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复