dede首页如何调用指定文章内容?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文

场景分析

你说的“调用指定文章内容”,通常有以下几种可能:

dede首页调用指定文章内容
(图片来源网络,侵删)
  1. 调用单篇文章的标题和简介:最常见,比如在首页某个板块显示一个公告或推荐文章。
  2. 调用单篇文章的正文内容:比如在首页某个位置显示完整的文章内容,而不仅仅是摘要。
  3. 调用多篇文章(根据ID列表):比如调用ID为 1, 5, 10 的三篇文章。

下面我将针对这些场景提供最常用和最有效的解决方案。


使用 DedeCMS 自定义标记 (最推荐)

这是 DedeCMS 最标准、最强大的方法,推荐优先使用,它通过修改 index.php 文件来实现。

场景1:调用单篇文章的标题和简介(例如文章ID为 1)

假设你想在首页的某个位置(比如公告栏)显示文章ID为 1 的文章的标题和简介。

第一步:找到并编辑 index.php 文件

dede首页调用指定文章内容
(图片来源网络,侵删)

用 FTP 或文件管理器登录你的网站服务器,找到根目录下的 index.php 文件。

第二步:在 index.php 中添加查询代码

index.php 文件中,找到 require_once(dirname(__FILE__)."/include/common.inc.php"); 这一行。在这一行的下面,添加以下 PHP 代码:

// 调用指定ID的文章
$arctle = $dsql->GetOne("SELECT * FROM `#@__archives` WHERE id = 1");
// 获取文章ID,用于后续获取文章详细内容
$article_id = $arctle['id'];
// 根据文章ID获取文章的详细信息(包括标题、简介等)
$article_info = $dsql->GetOne("SELECT a.title, a.description, a.pubdate, t.typedir 
                                FROM `#@__archives` a 
                                LEFT JOIN `#@__arctype` t ON a.typeid = t.id 
                                WHERE a.id = {$article_id}");

代码解释:

  • $dsql->GetOne(...): 这是 DedeCMS 执行单条查询并返回结果的方法。
  • SELECT * FROM#@__archivesWHERE id = 1: 这句 SQL 查询 dede_archives 表(存储文章基本信息的表),并获取 id 为 1 的所有数据。#@__ 是 DedeCMS 的表前缀,如果你的表前缀是 dede_,它就会自动替换成 dede_archives
  • $arctle = ...: 将查询结果存入 $arctle 变量。
  • 第二个查询是为了获取文章的分类目录信息,以便生成链接。

第三步:在首页模板文件中调用变量

打开你的首页模板文件,通常是 /templets/default/index.htm。 的位置,使用 DedeCMS 的变量语法来调用上面定义的变量:

<div class="announcement">
    <h3>网站公告</h3>
    <ul>
        <li>
            <a href="[field:typedir function='GetTypeurl(@me)'/]/[field:id/].html" title="[field:title/]">
                [field:title/]
            </a>
            <span class="date">([field:pubdate function='MyDate('Y-m-d', @me)'/])</span>
        </li>
    </ul>
</div>

模板标签解释:

  • [field:typedir function='GetTypeurl(@me)'/]: 获取文章的分类目录并生成正确的 URL。
  • [field:id/]: 文章 ID。
  • [field:title/]: 文章标题。
  • [field:description/]: 文章简介(。
  • [field:pubdate function='MyDate('Y-m-d', @me)'/]: 格式化发布日期。

重要提示: 使用 {dede:sql} 标签可以直接在模板里完成查询,无需修改 index.php,但这种方法在首页高并发下性能稍差,但对于少量调用是可以接受的。

{dede:sql sql="SELECT * FROM `#@__archives` WHERE id=1"}
    <a href="[field:arcurl/]">[field:title/]</a>
    <p>[field:description/]</p>
{/dede:sql}

场景2:调用单篇文章的(例如文章ID为 1)

存储在 #@__addonarticle 表(对于文章模型)或 #@__articleadd 表中,我们需要联合查询。

第一步:修改 index.php

同样在 index.php 中,添加如下代码:

// 调用指定ID文章的正文内容
$article_body = $dsql->GetOne("SELECT a.body, a.title 
                               FROM `#@__archives` ar 
                               LEFT JOIN `#@__addonarticle` a ON ar.id = a.aid 
                               WHERE ar.id = 1");

第二步:在首页模板中调用

index.htm 模板中,直接使用 {$article_body['body']} 来输出正文内容,DedeCMS 的正文内容通常是 HTML 格式,所以会直接渲染。

<div class="featured-content">
    <h2>{$article_body['title']}</h2>
    <div class="content">
        {$article_body['body']}
    </div>
</div>

场景3:调用多篇文章(例如ID为 1, 5, 10)

第一步:修改 index.php

index.php 中,使用 IN 关键字进行查询:

// 调用多个指定ID的文章
$article_ids = array(1, 5, 10); // 定义一个ID数组
$ids_str = implode(',', $article_ids); // 将数组转换为逗号分隔的字符串
$articles = $dsql->Execute("SELECT a.*, t.typedir 
                            FROM `#@__archives` a 
                            LEFT JOIN `#@__arctype` t ON a.typeid = t.id 
                            WHERE a.id IN ({$ids_str})");

第二步:在首页模板中循环调用

index.htm 中,使用 {dede:loop} 标签来循环遍历查询结果。

<div class="article-list">
    {dede:loop table='dede_archives a join dede_arctype t on a.typeid=t.id' sort='id' if='id in (1,5,10)'}
    <div class="item">
        <h3><a href="[field:typedir function='GetTypeurl(@me)'/]/[field:id/].html">[field:title/]</a></h3>
        <p class="summary">[field:description/]</p>
        <span class="info">发布于:[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
    </div>
    {/dede:loop}
</div>

{dede:loop} 标签说明:

  • table='...': 指定查询的表,这里我们使用 JOIN 连接了文章表和分类表。
  • sort='id': 排序方式,这里按 ID 排序。
  • if='id in (1,5,10)': 这是关键,指定了查询条件,直接在模板里写入了 ID 列表,非常方便。
  • [field:...]: 在循环内部,使用 field 标签来输出每个文章的字段。

使用SQL自定义标签(纯模板操作)

如果你不想修改 index.php 文件,可以使用 {dede:sql} 标签直接在模板里执行 SQL,这种方法更灵活,但要注意性能,首页不宜过多使用。

调用单篇文章标题和简介 (ID=1):

{dede:sql sql="SELECT title,description FROM `#@__archives` WHERE id=1"}
    <h2>[field:title/]</h2>
    <p>[field:description/]</p>
{/dede:sql}

调用单篇文章正文内容 (ID=1):

{dede:sql sql="SELECT a.title, a.body FROM `#@__archives` ar LEFT JOIN `#@__addonarticle` a ON ar.id = a.aid WHERE ar.id=1"}
    <h2>[field:title/]</h2>
    <div>[field:body/]</div>
{/dede:sql}

调用多篇文章 (ID in 1,5,10):

{dede:sql sql="SELECT a.title, a.description, t.typedir FROM `#@__archives` a LEFT JOIN `#@__arctype` t ON a.typeid=t.id WHERE a.id IN (1,5,10)"}
    <div class="item">
        <a href="[field:typedir/]/[field:id/].html">[field:title/]</a>
        <p>[field:description/]</p>
    </div>
{/dede:sql}

注意:使用 JOIN 查询时,[field:typedir/] 这种写法可能无法正确获取,需要确保你的 SQL 查询字段名和模板标签名对应,对于复杂查询,推荐方法一。


总结与建议

场景 推荐方法 优点 缺点
首页少量、固定调用 修改 index.php 性能最好,代码清晰,符合 DedeCMS 架构 需要修改核心文件,对新手有门槛
首页复杂、动态调用 {dede:sql} 纯模板操作,非常灵活,无需修改文件 首页频繁调用会影响性能,SQL 语法需要一定基础
列表页/内容页调用 {dede:sql}{dede:loop} 灵活方便 -

给你的最终建议:

  1. 如果调用的是固定不变的内容(比如一个公告),并且你希望网站速度最快,请使用 方法一
  2. 如果你只是临时需要,或者调用条件比较复杂多变,并且调用量不大,使用 方法二 ({dede:sql}) 更快捷方便。
  3. 调用多篇文章,使用 {dede:loop} 标签是模板内最优雅、最高效的方式。

希望这份详细的教程能帮助你解决问题!如果在操作中遇到任何问题,可以随时追问。

-- 展开阅读全文 --
头像
dede重定向循环问题如何解决?
« 上一篇 01-20
织梦cms小说网站采集
下一篇 » 01-20

相关文章

取消
微信二维码
支付宝二维码

目录[+]