在织梦CMS(DedeCMS)中,系统本身并没有一个直接显示“会员总共发表了多少篇文章”的字段,这个数据需要通过动态计算得出,计算的基础是,每篇文章都有一个 mid 字段,用来标识这篇文章属于哪个会员。

要获取会员发表的文章数量,主要有以下几种方法,适用于不同的场景:
通过SQL查询直接获取(最常用)
这是最直接、最准确的方法,通常用在后台管理、数据统计或者需要精确数值的地方。
在后台SQL查询工具中执行
您可以登录织梦后台,在 [系统] -> [SQL命令运行工具] 中,执行以下SQL语句来查询特定会员的文章数量。
语法:

SELECT COUNT(*) as article_count FROM `dede_archives` WHERE mid = '会员ID';
示例:
假设您想查询会员ID为 10 的用户发表的文章数量,就在SQL工具框里输入:
SELECT COUNT(*) as article_count FROM `dede_archives` WHERE mid = 10;
然后点击“查询”,执行后,结果会显示在下方,article_count 就是该会员的文章总数。
注意:
dede_archives是织梦默认的文章主表表名,如果您在安装时修改了表前缀,请替换成您自己的表前缀(yourname_archives)。mid是会员ID字段,对应dede_member表中的mid字段。
在PHP代码中使用
如果您想在网站的前台页面或自定义的PHP文件中显示这个数量,可以使用织梦的 dsql 类来执行查询。

示例代码:
<?php
// 1. 引入织梦核心文件
require_once(dirname(__FILE__)."/include/common.inc.php");
// 2. 获取要查询的会员ID
// 可以从会员登录信息中获取,或者通过URL参数等
$member_id = $cfg_ml->M_ID; // 如果当前会员已登录,可以这样获取
// 或者手动指定
// $member_id = 10;
// 3. 使用dsql执行查询
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT COUNT(*) as article_count FROM `#@__archives` WHERE mid = '$member_id'");
$dsql->Execute('count');
// 4. 获取结果
$row = $dsql->GetArray('count');
$article_count = $row['article_count'];
// 5. 输出结果
echo "该会员共发表了 " . $article_count . " 篇文章。";
// 释放资源
$dsql->Close();
?>
代码说明:
require_once(...):引入织梦的核心文件,确保可以使用织梦的全局变量和类。$cfg_ml->M_ID:这是织梦会员登录后,会员操作类$cfg_ml中存储的当前登录会员的ID。#@__:这是织梦系统定义的表前缀变量,会自动替换为您在后台配置的表前缀(如dede_),推荐使用,更具通用性。SetQuery():设置要执行的SQL语句。Execute():执行查询。GetArray():获取查询结果到数组中。
通过织梦标签调用(适用于前台模板)
如果您想在会员中心、个人主页等前台模板页面上显示当前登录会员的文章数,可以使用织梦的标签结合PHP代码来实现。
示例:在会员中心模板(member/templets/index.htm)中显示
<div class="user-info">
<p>欢迎您,{dede:var name='memberinfo'/}!</p>
<p>您当前的积分:{dede:var name='scores'/}</p>
<!-- 在这里添加显示文章数量的代码 -->
<p>您已发表文章:
<?php
$mid = $memberid; // 在会员中心模板中,$memberid 变量可直接用
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT COUNT(*) as article_count FROM `#@__archives` WHERE mid = '$mid'");
$dsql->Execute('count');
$row = $dsql->GetArray('count');
echo $row['article_count'];
$dsql->Close();
?>
篇。
</p>
</div>
说明:
- 这种方法将PHP代码直接嵌入到HTML模板文件中,简单直观。
$memberid是会员中心模板中可以直接使用的变量,代表当前登录会员的ID。
修改数据库添加字段(不推荐,一劳永逸但风险高)
如果您需要在很多地方频繁调用这个数值,并且不希望每次都去查询数据库,可以考虑修改数据库,为 dede_member 表增加一个字段来存储文章数量。
操作步骤(高风险,请务必先备份数据库!):
-
备份数据库:这是最重要的一步,防止操作失误导致数据丢失。
-
添加字段:在
dede_member表中增加一个字段,article_count,类型为INT,默认值为0。ALTER TABLE `dede_member` ADD `article_count` INT(10) NOT NULL DEFAULT '0';
-
编写更新脚本:创建一个PHP文件,运行它来为所有现有会员计算并更新文章数量。
<?php require_once(dirname(__FILE__)."/include/common.inc.php"); set_time_limit(0); // 防止脚本超时 $dsql = new DedeSql(false); // 获取所有会员 $dsql->SetQuery("SELECT mid FROM `#@__member`"); $dsql->Execute('m'); while($row = $dsql->GetArray('m')){ $mid = $row['mid']; // 计算每个会员的文章数 $count_dsql = new DedeSql(false); $count_dsql->SetQuery("SELECT COUNT(*) as cnt FROM `#@__archives` WHERE mid = '$mid'"); $count_dsql->Execute('c'); $count_row = $count_dsql->GetArray('c'); $article_count = $count_row['cnt']; $count_dsql->Close(); // 更新会员表中的文章数 $update_dsql = new DedeSql(false); $update_dsql->ExecuteNoneQuery("UPDATE `#@__member` SET article_count = '$article_count' WHERE mid = '$mid'"); echo "会员ID: {$mid} 的文章数已更新为: {$article_count}<br />"; } $dsql->Close(); echo "更新完成!"; ?> -
触发更新:每当会员发表新文章或删除文章时,您需要额外编写代码去更新这个
article_count字段的值,这通常需要修改织梦的核心文件(如article_add.php和article_delete.php),非常复杂,容易出错。
由于维护成本高且容易出错,强烈不推荐普通用户使用这种方法,除非您有非常特殊的需求和强大的二次开发能力。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| SQL查询 | 简单、准确、无需修改文件 | 每次调用都需查询数据库,对性能有微小影响 | 后台统计、一次性查询、数据展示 |
| PHP代码调用 | 灵活、可嵌入模板 | 需要一定的PHP基础 | 前台会员中心、个人主页等动态页面 |
| 修改数据库 | 查询速度快,无需实时计算 | 风险极高、维护复杂、破坏系统结构 | 极少情况,不推荐 |
给您的最终建议:
- 如果您只是想在后台看看某个会员发了多少篇文章,直接使用方法一的SQL命令工具即可。
- 如果您想在会员中心等前台页面显示这个数量,请使用方法二,将PHP代码嵌入到您的模板文件中,这是最常用且最稳妥的前台实现方式。
