外部调用dede文章,如何实现?

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

确保数据库连接信息正确

无论使用哪种方法,外部脚本都需要连接到DedeCMS的数据库,请确保你的外部脚本(如 index.php)能够正确访问到DedeCMS的配置文件。

外部调用dede文章
(图片来源网络,侵删)

你可以在外部脚本的开头引入DedeCMS的数据库配置文件:

<?php
// 引入DedeCMS的数据库配置文件
// 请根据你的实际路径修改
require_once '../dede/config.php';
// 现在你可以使用 $cfg_dbhost, $cfg_dbuser, $cfg_dbpwd, $cfg_dbname 等变量了
?>

使用DedeCMS内置函数(最推荐,最简单)

这是最直接、最安全的方法,因为它直接使用了DedeCMS自身封装好的函数,能完美处理标签、缓存等问题。

适用场景:在你的PHP网站页面中调用。

步骤:

外部调用dede文章
(图片来源网络,侵删)
  1. 在你的PHP文件中,引入DedeCMS的全局函数库 common.func.php
  2. 调用 GetArchives() 函数来获取文章列表。

代码示例:

假设你的外部文件是 index.php,DedeCMS安装在 ../dede/ 目录下。

<?php
// 1. 引入DedeCMS的配置文件,以便连接数据库
require_once '../dede/config.php';
// 2. 引入DedeCMS的全局函数库
require_once '../dede/include/common.func.php';
// 3. 设置调用参数
$TypeID = 1;          // 要调用的栏目ID,0表示所有栏目
$Row = 10;            // 调用文章数量
$col = 1;             // 每行显示几条
$titlelen = 30;       // 标题长度
$infolen = 150;       // 简介/摘要长度
$orderby = 'pubdate'; // 排序方式,如 'hot' (浏览量), 'click' (点击量), 'pubdate' (发布时间)
// 4. 调用函数并获取文章列表
$datalist = GetArchives($typeid, $row, $col, $titlelen, $infolen, $orderby);
// 5. 循环输出文章列表
if($datalist){
    foreach($datalist as $arcs) {
        // $arcs 是一个包含文章信息的数组
        $arcurl = $arcs['arcurl'];      // 文章链接
        $title = $arcs['title'];        // 文章标题
        $shorttitle = $arcs['shorttitle']; // 文章短标题
        $description = $arcs['description']; // 
        $pubdate = date('Y-m-d', $arcs['pubdate']); // 发布时间,格式化日期
        echo '<li>';
        echo '<a href="' . $arcurl . '" title="' . $title . '">' . $title . '</a>';
        echo '<span>' . $pubdate . '</span>';
        echo '</li>';
    }
} else {
    echo '<li>暂无文章</li>';
}
?>

优点:

  • 简单易用:代码量少,直接调用现成函数。
  • 功能强大:能自动处理分页、缓存、模型字段等复杂逻辑。
  • 稳定可靠:与DedeCMS核心紧密结合,不易出错。

原生SQL查询(灵活,性能高)

当你需要非常灵活的查询条件,或者对性能有极致要求时,可以直接写SQL语句查询数据库。

适用场景:需要自定义复杂查询条件,或者不想引入DedeCMS核心文件时。

代码示例:

<?php
// 1. 引入DedeCMS的配置文件
require_once '../dede/config.php';
// 2. 创建数据库连接
$link = mysql_connect($cfg_dbhost, $cfg_dbuser, $cfg_dbpwd);
mysql_select_db($cfg_dbname, $link);
mysql_query("SET NAMES 'utf8'"); // 确保字符集正确
// 3. 编写SQL语句
// 从 `dede_archives` 表查询,这是存储文章基本信息的表
// `dede_arctype` 是栏目表,`typeID` 对应 `dede_archives` 的 `typeid`
$sql = "SELECT a.id, a.title, a.typeid, a.pubdate, a.description, t.typename
        FROM dede_archives AS a
        LEFT JOIN dede_arctype AS t ON a.typeid = t.id
        WHERE a.arctypeid > 0 AND a.ismake = 1
        ORDER BY a.pubdate DESC
        LIMIT 10"; // LIMIT 10 表示获取10条最新文章
// 4. 执行查询
$result = mysql_query($sql);
// 5. 循环输出结果
if ($result && mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
        $arcurl = GetArcUrl($row['typeid'], $row['id']); // 需要此函数来生成正确链接
        $title = $row['title'];
        $description = $row['description'];
        $pubdate = date('Y-m-d', $row['pubdate']);
        echo '<li>';
        echo '<a href="' . $arcurl . '" title="' . $title . '">' . $title . '</a>';
        echo '<span>' . $pubdate . '</span>';
        echo '</li>';
    }
} else {
    echo '<li>暂无文章</li>';
}
// 6. 释放结果集并关闭连接
mysql_free_result($result);
mysql_close($link);
?>

注意:

  • GetArcUrl() 函数在 dede/inc_fun_funAdmin.php 中,如果要用,需要引入它。
  • 这种方法直接操作数据库,当DedeCMS版本升级或表结构变化时,代码可能需要修改。
  • 需要自己处理字符集、安全过滤等问题。

使用JS调用(跨域、方便前端)

如果你的外部网站是静态HTML(如 .html),或者使用其他后端语言(如ASP, JSP, Python),可以通过JS调用DedeCMS生成的JS文件来实现。

适用场景:非PHP网站、前端页面、需要跨域调用的场景。

步骤:

  1. 在DedeCMS后台创建JS调用文件:

    • 登录DedeCMS后台。
    • 进入 [模板] -> [自定义宏标记]
    • 点击 [增加新标记]
    • 标记名称:随便起一个,如 my_news
    • 标记类型:选择 JS
    • 所属栏目:选择你要调用的栏目。
    • 调用条数:设置要调用的文章数量。
    • 排序类型:选择排序方式,如 发布时间降序
    • 其他选项:根据需要设置标题长度、是否显示作者等。
    • 提交后,系统会生成一个JS调用代码,类似:
      [field:typelink /] <!-- 这个是栏目链接,不需要 -->
      {dede:arclist typeid='1' row='10' titlelen='30' orderby='pubdate'}
          <li><a href="[field:arcurl/]">[field:title/]</a></li>
      {/dede:arclist}
    • 复制这个 {dede:arclist}...{/dede:arclist} 部分的内容。
  2. 在DedeCMS根目录创建一个JS文件:

    • dede 文件夹的同级目录下(通常是网站根目录),创建一个文件,get_news.js
    • 将刚才复制的 {dede:arclist}...{/dede:arclist} 代码粘贴进去。
  3. 在外部网站页面中调用这个JS文件:

    • 在你的HTML页面的 <head><body> 中,使用 <script> 标签引入这个JS文件。
    • 显示在指定位置,你还需要一个HTML容器,<ul id="news_list"></ul>

示例代码:

外部网站 HTML (index.html):

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">外部调用DedeCMS文章</title>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
</head>
<body>
    <h1>最新文章</h1>
    <ul id="news_list">
        <!-- 文章列表将在这里动态加载 -->
    </ul>
    <!-- 引入DedeCMS生成的JS文件 -->
    <!-- 注意:这里的路径要相对于你的网站根目录 -->
    <script src="http://www.your-dede-site.com/get_news.js"></script>
    <script>
    // 使用jQuery来处理JS返回的HTML片段并插入到页面中
    // 注意:DedeCMS生成的JS文件通常直接输出HTML,所以需要包装一下
    // 假设 get_news.js 的内容是直接输出 <li>...</li> 的列表
    // 我们可以在它执行后,把内容包装进我们的 <ul> 里
    // 但更常见的做法是,让JS文件返回一个变量,然后我们处理这个变量。
    // 这里提供一个更健壮的JS调用方式,创建一个JS文件
    </script>
    <!-- 更推荐的JS调用方式:创建一个返回JSON的JS文件 -->
    <script src="http://www.your-dede-site.com/api/get_news_json.js"></script>
    <script>
    // 假设 api/get_news_json.js 的内容是:
    // var dedeNewsList = [{...}, {...}];
    // 在你的页面中这样处理:
    $(document).ready(function(){
        $.getScript('http://www.your-dede-site.com/api/get_news_json.js', function() {
            if (typeof dedeNewsList !== 'undefined') {
                var html = '';
                for (var i = 0; i < dedeNewsList.length; i++) {
                    var item = dedeNewsList[i];
                    html += '<li><a href="' + item.url + '" title="' + item.title + '">' + item.title + '</a></li>';
                }
                $('#news_list').html(html);
            }
        });
    });
    </script>
</body>
</html>

优点:

  • 跨域方便:不受服务器端语言限制。
  • 前端友好:可以直接在HTML中使用,方便SEO和静态化。
  • 解耦:调用端和DedeCMS完全分离。

缺点:

  • 依赖JS:如果用户禁用了JavaScript,则无法显示内容。
  • 性能略低:需要额外请求JS文件。
  • 相对复杂:需要额外创建和维护JS文件。

总结与对比

方法 优点 缺点 适用场景
内置函数法 最简单、最稳定、功能最全 必须是PHP环境,且引入DedeCMS核心 PHP网站内部调用,首选方法。
原生SQL法 性能高、灵活性极强 代码复杂,需手动处理细节,易受DedeCMS升级影响 需要复杂查询或对性能有极致要求的PHP项目。
JS调用法 跨域、方便前端、适合静态页面 依赖JS,性能略低,需要额外文件 非PHP网站、前端页面、需要前后端分离的场景。

对于绝大多数情况,强烈推荐使用方法一(内置函数法),因为它最省心、最可靠。

-- 展开阅读全文 --
头像
织梦后台幻灯片管理如何操作?
« 上一篇 04-21
如何将dede分页改成英文?
下一篇 » 04-21

相关文章

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

目录[+]