在帝国CMS中实现信息置顶功能并扣除会员积分,需要对系统进行一些修改。以下是详细的步骤和代码示例,帮助您顺利完成设置。

首先,在所需的系统模型中添加一个名为 top 的 int 字段,并设置为单选按钮(0 表示否,1 表示是)。接下来,主要修改 e/class/qinfofun.php 文件中的两处代码,分别用于增加和编辑操作。


第一步:修改增加操作的代码

在文件中找到以下代码:

esetcookie("lastaddinfotime",time(),time()+3600*24);

在其下方至 //------------- 之间替换为以下代码:

// 置顶扣分
$t = $empire->fetch1("select top from {$dbtbpre}ecms_".$tbname." where userid='$muserid' and id='$id' and classid='$classid' limit 1");

if ($t[top]) {
    $w = $empire->fetch1("select userfen from {$dbtbpre}enewsmember where userid='$muserid'");
    if ($w[userfen] >= 10) {
        $sql3 = $empire->query("update {$dbtbpre}enewsmember set userfen=userfen-10 where userid='$muserid'");
        printerror("AddQinfoSuccess", $reurl, 1);
    } else {
        $sql4 = $empire->query("update {$dbtbpre}ecms_".$tbname." set top=0 where userid='$muserid' and id='$id' and classid='$classid' limit 1");
        printerror("jifenbugou", $reurl, 1);
    }
} else {
    printerror("AddQinfoSuccess", $reurl, 1);
}


第二步:修改编辑操作的代码

找到以下代码:

if ($sql) {
    $reurl = DoingReturnUrl("ListInfo.php?mid=$mid", $add['ecmsfrom']);
    if ($add['editgotoinfourl'] && $infor['checked']) // 返回内容页
    {
        if ($cr['showdt'] == 1) {
            $reurl = $public_r[newsurl]."e/action/ShowInfo/?classid=$classid&id=$id";
        } elseif ($cr['showdt'] == 2) {
            $reurl = $public_r[newsurl]."e/action/ShowInfo.php?classid=$classid&id=$id";
        } else {
            $reurl = $titleurl;
        }
    }

在其下方至 //------------- 之间替换为以下代码:

// 置顶扣分
$t = $empire->fetch1("select top from {$dbtbpre}ecms_".$tbname." where userid='$muserid' and id='$id' and classid='$classid' limit 1");

if ($t[top]) {
    $w = $empire->fetch1("select userfen from {$dbtbpre}enewsmember where userid='$muserid'");
    if ($w[userfen] >= 10) {
        $sql3 = $empire->query("update {$dbtbpre}enewsmember set userfen=userfen-10 where userid='$muserid'");
        printerror("EditQinfoSuccess", $reurl, 1);
    } else {
        $sql4 = $empire->query("update {$dbtbpre}ecms_".$tbname." set top=0 where userid='$muserid' and id='$id' and classid='$classid' limit 1");
        printerror("jifenbugou", $reurl, 1);
    }
} else {
    printerror("EditQinfoSuccess", $reurl, 1);
}


注意事项

红色部分的数字 10 表示扣除的积分值,您可以根据实际需求自行调整。另外,提示信息 jifenbugou 可以在 e/data/language/gb/pub/q_message.php 文件中进行自定义修改。

为了避免与现有字段冲突,建议新增加一个名为 top 的字段,这样可以减少未来升级时可能带来的麻烦。

如果会员积分不足,系统会提示“积分不足”,但信息仍然可以提交,只是无法置顶。


列表模板调用方法

在列表模板中可以通过以下 SQL 查询调用置顶信息:

[e:loop={"select * from phome_ecms_house where top=1 and checked=1 and classid='$GLOBALS[navclassid]' limit 3",3,24,0}]

    
    [置顶]
    
    
    
    

[/e:loop]


更新功能:添加到期时间

为了限制置顶的有效期,可以在数据库中新增一个名为 date 的字段,表示到期时间。在上述列表模板的 SQL 查询中加入以下条件:

and (unix_timestamp(youxiaoqi)-UNIX_TIMESTAMP(NOW())) > 0

以上就是实现帝国CMS信息置顶功能并扣除会员积分的完整步骤。如果您有任何问题,欢迎跟帖讨论,我会尽力解答。