字段在织梦的栏目数据表dede_arctype中是存在的,所以调用起来非常直接,下面我将为你详细介绍在不同场景下的调用方法。

(图片来源网络,侵删)
核心调用方法
无论在什么位置,调用栏目的seotitle都遵循一个基本语法:
{dede:field.seotitle /}
这个标签会直接输出当前栏目的seotitle字段值。
在列表页(栏目页)中调用
这是最常见的场景,你希望在列表页的<title>标签里显示栏目的seotitle。
目标: 让列表页的<title>为“栏目SEO标题 - 网站名”。

(图片来源网络,侵删)
操作步骤:
- 打开你的列表页模板文件,这个文件通常位于
/templets/你的模板目录/目录下,文件名可能是list_article.htm,list_category.htm等。 - 找到
<title>标签,它通常在<head>部分内。 - 将其修改为以下代码:
{dede:field.seotitle runphp='yes'}
if(@me == '') @me = @me = $GLOBALS['cfg_list_symbol'].$GLOBALS['cfg_webname'];
else @me = @me.$GLOBALS['cfg_list_symbol'].$GLOBALS['cfg_webname'];
{/dede:field.seotitle}
代码解释:
{dede:field.seotitle runphp='yes'}: 这表示我们要调用seotitle字段,并且开启PHP运行功能。if(@me == ''):@me是织梦模板引擎中代表当前标签值的变量,这句代码的意思是:“如果seotitle为空”。@me = @me = $GLOBALS['cfg_list_symbol'].$GLOBALS['cfg_webname'];: 如果seotitle为空,那么@me(即最终输出的值)就设置为“网站分隔符 + 网站名称”。cfg_list_symbol通常是“-”,cfg_webname是你的网站后台设置的网站名称。else @me = @me.$GLOBALS['cfg_list_symbol'].$GLOBALS['cfg_webname'];: 如果seotitle不为空,那么就在seotitle后面加上“网站分隔符 + 网站名称”。- 这样处理后,就能完美实现“有
seotitle则显示seotitle,没有则显示栏目名-网站名”的智能效果。
页中调用
你可能想在文章内容页的某个位置(比如面包屑导航下方、文章标题上方)显示该文章所属栏目的seotitle。
目标: 在文章内容页显示“所属栏目的SEO标题”。

(图片来源网络,侵删)
操作步骤:
- 打开你的文章内容页模板文件,这个文件通常位于
/templets/你的模板目录/目录下,文件名是article_article.htm。 - 在你希望显示
seotitle的位置,插入以下代码:
<p class="seo-title">栏目SEO标题:{dede:field.typeid function="GetTypeDef(@me, 'seotitle')"/}</p>
代码解释:
{dede:field.typeid ...}:typeid是当前文章所属栏目的ID。function="GetTypeDef(@me, 'seotitle')": 这是关键,我们调用了一个自定义函数GetTypeDef。@me在这里代表typeid的值(即栏目ID)。'seotitle'是我们想要从该栏目中获取的字段名。
GetTypeDef函数的作用就是根据栏目ID,去dede_arctype表中查找并返回指定字段的值。
更简单的方法(推荐):
织梦的{dede:field}标签本身就支持通过function属性调用任意函数来获取关联数据,你也可以这样写,效果完全一样:
{dede:field.typeid function="getChannelSeoTitle(@me)"/}
你需要将这个getChannelSeoTitle函数添加到织梦的核心函数文件中,以实现复用。
如何添加getChannelSeoTitle函数:
- 打开
/include/common.func.php文件。 - 在文件末尾的
?>之前,添加以下函数代码:
/**
* 根据栏目ID获取栏目的seotitle
* @param int $typeid 栏目ID
* @return string 栏目的seotitle
*/
function getChannelSeoTitle($typeid) {
if (empty($typeid)) {
return '';
}
$dsql = new DedeSql(false);
$row = $dsql->GetOne("SELECT seotitle FROM `#@__arctype` WHERE id = $typeid");
$dsql->Close();
return $row['seotitle'];
}
添加后,你就可以在任何模板中通过 {dede:field.typeid function="getChannelSeoTitle(@me)"/} 来调用了,非常方便。
在首页或自定义页面中调用
如果你想调用指定栏目的seotitle,而不是当前栏目的,可以使用typeid属性。
目标: 在首页调用ID为“1”的栏目的seotitle。
操作步骤:
- 打开你的首页模板文件
index.htm。 - 在需要显示的位置插入以下代码:
首页调用指定栏目(1)的SEO标题:{dede:type typeid='1'}[field:seotitle/]{/dede:type}
代码解释:
{dede:type typeid='1'}:typeid='1'指定了我们想要获取的栏目ID。[field:seotitle/]: 在这个标签对内,field:seotitle就代表这个指定栏目的seotitle值。{/dede:type}: 标签闭合。
| 场景 | 模板代码 | 说明 |
|---|---|---|
列表页<title> |
{dede:field.seotitle runphp='yes'}...{/dede:field.seotitle} |
智能判断,有seotitle则用,没有则用“栏目名-网站名”。 |
| 首页调用指定栏目 | {dede:type typeid='1'}[field:seotitle/]{/dede:type} |
typeid为你想要调用的栏目ID。 |
希望这些详细的解释和示例能帮助你成功在织梦CMS中调用栏目的seotitle!
