网络建站知识发布于分享网站

当前位置:首页>>新闻中心>>CMS教程>>dedecms教程

Dede自动获取上级栏目标题、关键字与描述的方法

时间:2025-03-31 12:54:06    来源:    人气:1

在构建大型网站时,通常会有上百个栏目。为了优化SEO效果,在栏目模板中,我们通常会使用以下代码来调用栏目标题、关键字和描述。


<title>{dede:field.seotitle/}</title>
<meta name="keywords" content="{dede:field name='keywords'/}" />
<meta name="description" content="{dede:field name='description' function='html2text(@me)'/}" />

然而,这种方法存在一个问题:如果某些栏目忘记填写标题、关键字或描述,那么这些字段将会为空。为了解决这个问题,我们可以设置当栏目标题、关键字或描述为空时,自动调用上级栏目的内容;若上级栏目也为空,则继续调用上上级栏目,直到顶级栏目。如果顶级栏目仍然没有内容,则调用网站首页的标题、关键字和描述。

接下来,我将分享一种实现该功能的方法。

### 第一步:修改核心文件
打开`/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');

完整的代码段应如下所示:


$query = "SELECT tp.*,ch.typename as ctypename,ch.addtable,ch.issystem FROM `idea_arctype` tp left join `idea_channeltype` ch
on ch.id=tp.channeltype  WHERE tp.id='$typeid' ";
if($typeid > 0)
{
    $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');

    if(is_array($this->TypeInfos))
    {
        $this->TypeInfos['tempindex'] = MfTemplet($this->TypeInfos['tempindex']);
        $this->TypeInfos['templist'] = MfTemplet($this->TypeInfos['templist']);
        $this->TypeInfos['temparticle'] = MfTemplet($this->TypeInfos['temparticle']);
    }
}


### 第二步:添加自定义方法
在`TypeLink`类中增加一个名为`GetTrueInfos`的方法,用于递归获取上级栏目的信息。代码如下:


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];
}


### 保存并测试
完成上述修改后,生成静态页面并预览效果。此方法已在DEDECMS 5.7 SP1版本上测试通过,其他版本可能需要进一步验证。

通过以上步骤,您可以确保每个栏目都能拥有有效的SEO标题、关键字和描述,从而提升网站的整体搜索引擎优化效果。希望这个方法对您有所帮助!

相关文章

  • Dedecms 删除文档时同时清除文章中图片的方法

    Dedecms 删除文档时同时清除文章中图片的方法

    在网站建设与维护的过程中,优化代码结构和功能是提升网站性能的重要步骤。本文将介绍如何通过自定义函数实现文章删除时自动清理相关资源的功能,从而提高系统的整洁性和存储效率。以下是具体的操作步骤及代码实现。首先, 在 `/include` 目录下创建一个名为 `extend.func.php` 的文件...
    2025-03-31
  • Dedecms上传图片提示302错误ERROR的解决方法

    Dedecms上传图片提示302错误ERROR的解决方法

    在进行图片上传操作时,用户可能会遇到302错误以及带有ERROR提示的图片上传失败问题。这些问题可能由多种原因引发,因此本文将对这些情况进行整理,以帮助大家更有效地定位并解决问题。 第一种情况:图片文件本身损坏。 这种情况会导致系统返回ERROR错误提示,不过发生概率较低。如果怀疑是图片损坏导致的...
    2025-03-31
  • DEDECMS模板使用教程

    DEDECMS模板使用教程

    如果您正在寻找一种高效的方法来使用Dedecms模板搭建网站或论坛,那么本文将为您提供详尽的指导。从模板解压到最终完成配置,每一步都将清晰呈现,帮助您快速掌握整个流程。 第一步:解压Dedecms模板 将下载的Dedecms模板文件解压出来,确保所有文件完整无误。如下图所示: 第二步:获取D...
    2025-03-31
  • Dedecms Dede 附加表自定义字段与主表文章关联方法

    Dedecms Dede 附加表自定义字段与主表文章关联方法

    在使用DedeCMS开发装修网站时,设计师和设计作品之间的关联是一个重要的功能需求。通常情况下,文章(作品)的内容部分存储在主表dede_addonarticle中,而自定义字段则存储在附加表dede_archives中。为了实现这一功能,可以采用以下两种方法。 ① 根据发布人调用相关文章; ...
    2025-03-31

公众号