菜鸟科技网

织梦如何调取单篇文章,织梦如何调取单篇文章?

在织梦(DedeCMS)系统中,调取单篇文章是网站开发中常见的需求,例如在首页展示指定文章、在栏目页调用特定内容或制作自定义页面时,织梦提供了多种灵活的方式实现单篇文章的调取,主要包括使用SQL语句、arclist标签、dede标签以及自定义函数等方法,以下将详细介绍这些方法的实现步骤和注意事项。

织梦如何调取单篇文章,织梦如何调取单篇文章?-图1
(图片来源网络,侵删)

使用SQL语句直接查询

SQL语句是最直接的方式,适用于需要灵活查询条件的场景,通过织梦的dsql类或$dsql全局变量,可以执行自定义SQL语句获取单篇文章数据,要获取ID为10的文章,可以使用以下代码:

<?php
$row = $dsql->GetOne("SELECT * FROM `dede_archives` LEFT JOIN `dede_addonarticle` ON `dede_archives`.id=`dede_addonarticle`.aid WHERE `dede_archives`.id = 10");
if($row){
    echo $row['title']; // 输出文章标题
    echo $row['body']; // 输出文章内容
}
?>

注意事项

  1. 表名前需添加表前缀(如dede_),若未修改默认前缀可直接使用。
  2. 建议使用GetOne方法直接获取单条数据,避免使用GetAll造成资源浪费。
  3. 涉及多表联查时,需确保关联字段正确(如archives.idaddonarticle.aid)。

使用arclist标签调用

arclist标签是织梦最常用的内容调用标签,通过指定idaid参数可调取单篇文章。

{dede:arclist id='10' titlelen='50'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <p>[field:body/]</p>
{/dede:arclist}

参数说明

织梦如何调取单篇文章,织梦如何调取单篇文章?-图2
(图片来源网络,侵删)
  • id:文章ID,多个ID用逗号分隔(如id='10,12')。
  • aid:与id功能类似,但aid优先级更高。 len`:标题长度限制,单位为字符。
  • row:显示条数,调取单篇文章时设为1

局限性:arclist标签默认不直接支持调用文章内容(body字段),需结合php标签使用,如下所示:

{dede:php}
    $row = $dsql->GetOne("SELECT body FROM `dede_addonarticle` WHERE aid = 10");
    echo $row['body'];
{/dede:php}

使用dede标签(如field、artlist)

在文章详情页或自定义页面中,可直接使用织梦内置标签获取当前文章信息,在文章内容页(article_article.htm)中:

{dede:field.title/} <!-- 文章标题 -->
{dede:field.body/} <!-- 文章内容 -->

若需在非文章页调取指定ID的文章,可通过{dede:sql}标签实现:

{dede:sql sql="SELECT title, body FROM `dede_archives` LEFT JOIN `dede_addonarticle` ON id=aid WHERE id=10"}
    <h3>[field:title/]</h3>
    <p>[field:body/]</p>
{/dede:sql}

通过自定义函数或封装方法

对于频繁调用的场景,可封装自定义函数到include/common.func.php文件中。

织梦如何调取单篇文章,织梦如何调取单篇文章?-图3
(图片来源网络,侵删)
function getArticle($id){
    global $dsql;
    $row = $dsql->GetOne("SELECT * FROM `dede_archives` LEFT JOIN `dede_addonarticle` ON id=aid WHERE id=$id");
    return $row;
}

在模板中调用:

<?php
    $article = getArticle(10);
    if($article){
        echo $article['title'];
        echo $article['body'];
    }
?>

不同场景下的选择建议

场景 推荐方法 优点 缺点
需要复杂查询条件 SQL语句 灵活度高,可自定义字段 需编写SQL,易出错
首页/栏目页简单调用 arclist标签 标签化调用,无需代码 内容调用需额外处理
文章详情页或静态页 dede标签(field/sql) 直接调用,无需额外代码 仅限特定模板文件使用
多次复用或复杂逻辑 自定义函数 代码复用,逻辑清晰 需修改核心文件

相关问答FAQs

Q1:为什么使用arclist标签调取的文章内容为空?
A:arclist标签默认不支持直接调用文章内容(body字段),需通过{dede:php}标签结合SQL语句获取内容,或改用{dede:sql}标签直接查询数据库,需确保文章类型为“普通文章”,否则需关联对应附加表(如dede_addonarticle)。

Q2:调取单篇文章时如何排除特定栏目?
A:在SQL语句中添加NOT IN条件,

$row = $dsql->GetOne("SELECT * FROM `dede_archives` WHERE id=10 AND typeid NOT IN(3,5)");

其中typeid NOT IN(3,5)表示排除栏目ID为3和5的文章,若使用arclist标签,可通过channelidtypeid参数指定栏目,但排除功能需结合SQL实现。

分享:
扫描分享到社交APP
上一篇
下一篇