### 问题描述 Dedecms默认的导航标签 `{dede:channel}` 并不支持直接调用栏目SEO标题(seotitle)。例如,在以下代码中:
{dede:channel type='top'}
[field:typename/]
{/dede:channel}
### 解决方案 #### 第一步:修改 `channel.lib.php` 1. 打开 Dedecms 的 `/include/taglib` 文件夹下的 `channel.lib.php` 文件。 2. 定位到大约第 78 行到 94 行的代码段,这部分代码用于定义 SQL 查询语句。 以下是原始代码示例:
if($type=='top') {
$sql = "SELECT id, typename, typedir, isdefault, ispart, defaultname, namerule2, moresite, siteurl, sitepath
FROM `dede_arctype` WHERE reid=0 And ishidden<>1 order by sortrank asc limit 0, $line ";
} else if($type=='son') {
if($typeid==0) return '';
$sql = "SELECT id, typename, typedir, isdefault, ispart, defaultname, namerule2, moresite, siteurl, sitepath
FROM `dede_arctype` WHERE reid='$typeid' And ishidden<>1 order by sortrank asc limit 0, $line ";
} else if($type=='self') {
if($reid==0) return '';
$sql = "SELECT id, typename, typedir, isdefault, ispart, defaultname, namerule2, moresite, siteurl, sitepath
FROM `dede_arctype` WHERE reid='$reid' And ishidden<>1 order by sortrank asc limit 0, $line ";
}
if($type=='top') {
$sql = "SELECT id, typename, typedir, isdefault, ispart, defaultname, namerule2, moresite, siteurl, sitepath, seotitle
FROM `dede_arctype` WHERE reid=0 And ishidden<>1 order by sortrank asc limit 0, $line ";
} else if($type=='son') {
if($typeid==0) return '';
$sql = "SELECT id, typename, typedir, isdefault, ispart, defaultname, namerule2, moresite, siteurl, sitepath, seotitle
FROM `dede_arctype` WHERE reid='$typeid' And ishidden<>1 order by sortrank asc limit 0, $line ";
} else if($type=='self') {
if($reid==0) return '';
$sql = "SELECT id, typename, typedir, isdefault, ispart, defaultname, namerule2, moresite, siteurl, sitepath, seotitle
FROM `dede_arctype` WHERE reid='$reid' And ishidden<>1 order by sortrank asc limit 0, $line ";
}
#### 第二步:处理高亮状态下的 SEO 标题调用 接下来,我们需要确保在导航栏高亮状态下也能正确调用 SEO 标题。为此,需要进一步修改 `channel.lib.php` 文件。 1. 定位到大约第 140 行。 2. 在现有代码的基础上新增一行:
$linkOkstr = str_replace("~seotitle~", $row['seotitle'], $linkOkstr);
#### 第三步:更新模板代码 最后,在模板文件中使用以下代码:
{dede:channel type='top' currentstyle="~typename~
[field:seotitle/] "}
[field:typename/]
[field:seotitle/]
{/dede:channel}
### 总结 通过以上步骤,我们成功实现了 Dedecms 导航栏中对 SEO 标题的支持。这种方法不仅提高了用户体验,还增强了网站的搜索引擎优化能力。如果你遇到类似问题,可以按照上述方法进行操作。