在DEDECMS中,为了确保网站SEO优化的有效性,通常需要在栏目模板中调用栏目的标题、关键字和描述,当个别栏目忘记填写这些信息时,会导致页面上这些重要元素为空,为了解决这个问题,可以通过编程自动获取上级栏目的标题、关键字和描述。
实现步骤
1、修改typelink.class.php文件:
打开/include/typelink.class.php
文件。
找到代码$this>TypeInfos = $this>dsql>GetOne($query);
。
在该行代码下方,添加三行新代码,用于自动获取上级栏目的标题、关键字和描述:
“`php
$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()
方法获取上级栏目的信息。
2、增加GetTrueInfos方法:
在/include/typelink.class.php
文件中,增加一个新的方法GetTrueInfos()
:
“`php
function GetTrueInfos($info = ‘seotitle’) {
$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();
}
if (empty($infos[$info])) {
if ($info == "seotitle") return $GLOBALS[‘cfg_webname’];
if ($info == "keywords") return $GLOBALS[‘cfg_keywords’];
if ($info == "description") return $GLOBALS[‘cfg_description’];
}
return $infos[$info];
}
“`
此方法会逐级向上查找,直到找到非空的标题、关键字或描述为止,如果所有上级栏目都没有设置这些信息,则会返回全局配置中的相应值。
3、保存并更新:
完成上述修改后,保存文件并通过后台管理界面进行一键更新,这样,就可以在前台预览到效果了。
示例代码
以下是一个完整的示例代码,展示了如何在栏目模板中调用栏目的SEO标题、关键字和描述:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF8"> <title>{dede:field.seotitle/}</title> <meta name="keywords" content="{dede:field name='keywords'/}"> <meta name="description" content="{dede:field name='description' function='html2text(@me)'/}"> </head> <body> <!其他HTML内容 > </body> </html>
相关问答FAQs
1、Q: 如果在顶级栏目中也没有设置标题、关键字和描述,会如何处理?
A: 如果顶级栏目中也没有设置这些信息,系统会使用全局配置中的网站名称($cfg_webname
)、关键字($cfg_keywords
)和描述($cfg_description
)作为默认值。
2、Q: 这个方法适用于所有版本的DEDECMS吗?
A: 这个方法在DEDECMS 5.7 SP1版本上测试有效,但在其他版本上未进行全面测试,建议在其他版本上使用时进行充分的测试,以确保兼容性。
DedeCMS 自动获取上级栏目标题、关键字、描述的详细步骤
1. 确认环境
确保您的网站已经安装并配置了DedeCMS,并且已经创建了一些栏目。
2. 准备工作
确定要获取上级栏目信息的栏目ID或标识符。
确保您的PHP环境中已经启用了对DedeCMS的API调用。
3. 获取上级栏目信息
以下是一个PHP示例代码,用于从DedeCMS获取指定栏目的上级栏目的标题、关键字和描述。
<?php // 引入DedeCMS的配置文件 require_once 'dede/config.php'; // 定义要获取上级栏目信息的栏目ID $cid = 10; // 假设我们想要获取ID为10的栏目的上级栏目信息 // 获取上级栏目的信息 $arcRow = $dsql>GetOne("SELECT * FROM#@__arctype
WHERE id = '$cid'"); // 检查是否存在上级栏目 if ($arcRow['parentid'] > 0) { // 获取上级栏目的ID $parentid = $arcRow['parentid']; // 再次查询上级栏目的详细信息 $parentArcRow = $dsql>GetOne("SELECT * FROM#@__arctype
WHERE id = '$parentid'"); // 输出上级栏目的标题、关键字和描述 echo "上级栏目标题: " . $parentArcRow[' typename'] . "<br/>"; echo "上级栏目关键字: " . $parentArcRow['keywords'] . "<br/>"; echo "上级栏目描述: " . $parentArcRow['description'] . "<br/>"; } else { echo "该栏目没有上级栏目。"; } ?>
4. 解释代码
引入DedeCMS的配置文件,这是必须的,因为DedeCMS使用这个文件来配置数据库连接等。
设置要获取上级栏目信息的栏目ID。
使用$dsql>GetOne
函数查询当前栏目的详细信息。
如果当前栏目存在上级栏目(parentid
大于0),则查询上级栏目的详细信息。
输出上级栏目的标题、关键字和描述。
5. 注意事项
确保在调用DedeCMS API时,使用正确的数据库前缀(如#@__arctype
)。
代码中的数据库操作需要根据您的DedeCMS版本和数据库配置进行调整。
如果您的栏目结构很复杂,可能需要递归查询以获取更深层的上级栏目信息。
步骤和代码示例应该能够帮助您在DedeCMS中自动获取上级栏目的标题、关键字和描述。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1167868.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复