菜鸟科技网

dede当前栏目作者如何调用?

在织梦(DedeCMS)系统中,调用当前栏目的作者信息是一个常见需求,尤其是在内容展示需要体现栏目归属或责任归属的场景中,要实现这一功能,需要结合DedeCMS的标签语法和数据库结构进行灵活调用,以下是详细的实现方法和注意事项。

dede当前栏目作者如何调用?-图1
(图片来源网络,侵删)

需要明确DedeCMS中存储栏目作者信息的字段,在dede_arctype表(栏目表)中,并没有直接的“作者”字段,但通常可以通过自定义字段或利用descriptionkeywords等字段扩展存储作者信息,如果未使用自定义字段,也可以通过关联dede_admin表(管理员表)来获取栏目负责人的信息,以下是两种主流的实现方式:

使用自定义字段存储作者信息

  1. 添加自定义字段:在DedeCMS后台进入“系统”-“SQL命令行工具”,执行以下SQL语句为dede_arctype表添加一个author字段(如果已存在则跳过):
    ALTER TABLE `dede_arctype` ADD `author` VARCHAR(100) NOT NULL DEFAULT '';
  2. 编辑栏目并填写作者:在“频道模型”-“栏目管理”中编辑目标栏目,在“自定义字段”部分找到新增的author字段并填写作者名称。
  3. 调用作者信息:在模板文件中使用typeid全局变量获取当前栏目ID,并通过GetOneType函数获取栏目信息,进而调用作者字段,示例代码如下:
    {dede:field.name function="GetOneType(@me, 'author')"/}

    更规范的写法是使用arclist标签结合channel标签,但更推荐直接通过PHP代码调用:

    <?php
    $typeid = $GLOBALS['typeid'];
    $row = $dsql->GetOne("SELECT author FROM dede_arctype WHERE id='$typeid'");
    echo $row['author'];
    ?>

关联管理员表获取栏目负责人

如果希望调用的是后台登录的管理员名称(即栏目创建者或负责人),可以通过dede_arctype表的issystem字段关联dede_admin表,示例代码如下:

<?php
$typeid = $GLOBALS['typeid'];
$row = $dsql->GetOne("SELECT c.*, a.username FROM dede_arctype c LEFT JOIN dede_admin a ON c.adminid=a.id WHERE c.id='$typeid'");
echo $row['username'];
?>

注意事项

  1. 字段命名规范:自定义字段时需避免使用保留关键字(如idname等),以免与系统字段冲突。
  2. 缓存问题:DedeCMS默认开启栏目缓存,修改字段后需在后台“系统”-“一键更新缓存”中刷新缓存。
  3. 多级栏目处理:如果当前栏目是子栏目,需确保父栏目也设置了作者信息,或通过递归查询获取上级栏目的作者。

不同场景下的调用优化

  • 列表页调用:在list_article.htm中,可通过{dede:field.typeid/}获取栏目ID,结合上述PHP代码调用作者,页调用**:在article_article.htm中,可直接使用{$typename}获取栏目名称,但需额外通过PHP代码获取作者字段。
  • 全站统一调用:在head.htm等公共模板中,可通过全局变量传递作者信息,但需注意性能影响。

以下是一个调用示例的对比表格:

dede当前栏目作者如何调用?-图2
(图片来源网络,侵删)
调用场景 代码示例 适用模板
自定义字段调用 {dede:field.author/} 单独栏目模板
PHP代码调用 <?php echo $dsql->GetOne("SELECT author FROM dede_arctype WHERE id='$typeid'")['author'];?> 所有PHP支持模板
管理员名称调用 <?php echo $dsql->GetOne("SELECT a.username FROM dede_arctype c LEFT JOIN dede_admin a ON c.adminid=a.id WHERE c.id='$typeid'")['username'];?> 内容页或列表页

相关问答FAQs

Q1:为什么调用作者信息时显示为空?
A1:可能原因包括:①未在栏目中填写作者信息;②自定义字段名称错误或未添加到模板;③栏目缓存未更新,请检查字段名称是否正确,并尝试在后台更新缓存。

Q2:如何在首页调用所有栏目的作者列表?
A2:可通过{dede:channel}标签遍历所有栏目,并在循环内调用作者字段,示例代码:

{dede:channel type='top' typeid=''}
<li>栏目名称:[field:name/] 作者:[field:author/]</li>
{/dede:channel}

需确保所有顶级栏目均已填写作者信息,否则对应位置将显示空白。

dede当前栏目作者如何调用?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇