当前位置: 首页 > article >正文

织梦DedeCMS增加文章【点赞】功能

在DedeCMS文章增加一个点赞功能,每个IP点限制一次点赞;

测试版本:DedeCMS-V5.7.117-UTF8

一、新增字段

1、在 dede_archives 表中增加【zan】这个字段,加到weight这个字段后边

2、后台 - 系统 - sql命令行工具 - 多行命令  输入以下执行代码

ALTER TABLE dede_archives ADD zan int(11) NOT NULL DEFAULT '0' AFTER weight;

二、新增数据表

1、新增一个表【dede_zan】,这个表是保存被赞的文档aid 及IP的,为了检测是否赞过的IP

2、后台 - 系统 - sql命令行工具 - 多行命令  输入以下执行代码

CREATE TABLE IF NOT EXISTS `dede_zan` ( 

  `id` int(11) NOT NULL AUTO_INCREMENT, 

  `aid` int(11) NOT NULL

  `ip` varchar(40) NOT NULL

  PRIMARY KEY (`id`) 

) ENGINE=MyISAM  DEFAULT CHARSET=utf8

三、获取文档被赞次数

1、打开【include/extend.func.php】 中增加以下函数,用来获取文档被赞次数的

2、在最下面增加以下代码:

function zan($aid)

{

    // 声明使用全局变量 $dsql,用于数据库操作

    global $dsql;

    // 执行 SQL 查询,从 dede_archives 表中获取指定文章的 id 和 zan 字段

    $row = $dsql->GetOne("Select id,zan From dede_archives where id='".$aid."'");

    // 返回文章的点赞数

    return $row['zan'];

}

四、建立zan.php点赞文件

1、新建一个【zan.php】文件,存放在【/plus/】目录下;

2、zan.php文件代码

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
$ip = getip(); // 获取用户 IP 
$id = isset($_GET['aid']) ? $_GET['aid'] : $_POST['id']; 
if (!isset($id) || empty($id)) exit; 

// 查询已赞过的 IP
$dsql->SetQuery("SELECT ip FROM #@__zan  WHERE aid='".$id."' and ip='$ip'");
$dsql->Execute();
$count = $dsql->GetTotalRow();

if ($count == 0) { // 如果没有记录 
    $dsql->ExecuteNoneQuery("update #@__archives set zan=zan+1 where id='$id'; "); // 写入赞数
    $dsql->ExecuteNoneQuery("insert into #@__zan (aid,ip) values ('$id','$ip'); "); // 写入 IP 及被赞的 AID 
}
$rows = $dsql->GetOne("Select zan  from #@__archives where id='".$id."'"); // 获取被赞的数量
$zan = $rows['zan']; // 获取赞数值 
if ($count == 0) { 
    echo "<i class='fa'>❤</i>点赞($zan)"; 
} else { 
    $output = "<script>function showAlert() { alert('您已点过赞!'); }</script>";
    $output .= "<i class='fa'>❤</i>点赞($zan)";
    $output .= "<script>showAlert();</script>";
    echo $output;
}
?>

五、建立zan.count.php调用点赞数文件

1、新建一个【zan.count.php】文件,存放在【/plus/】目录下;

2、zan.count.php文件代码

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
$ip = getip(); // 获取用户 IP 
$id = isset($_GET['aid']) ? $_GET['aid'] : $_POST['id']; 
if (!isset($id) || empty($id)) exit; 

// 查询已赞过的 IP
$dsql->SetQuery("SELECT ip FROM #@__zan  WHERE aid='".$id."' and ip='$ip'");
$dsql->Execute();
$count = $dsql->GetTotalRow();
$rows = $dsql->GetOne("Select zan  from #@__archives where id='".$id."'"); // 获取被赞的数量
$zan = $rows['zan']; // 获取赞数值 
// 判断是否是通过 JS 以 aid 参数请求,若是则直接输出点赞值的 JS 代码
if (isset($_GET['aid'])) {
    // 对 $zan 进行 HTML 实体编码,避免特殊字符引发问题
    $safeZan = htmlspecialchars($zan, ENT_QUOTES, 'UTF-8'); 
    if ($count == 0) { 
        echo "document.write('<i class=\'fa\'>♡</i>点赞($safeZan)');";
        exit;
    } else {
        echo "document.write('<i class=\'fa\'>❤</i>点赞($safeZan)');";
        exit;
    }
}

?>

六、文章模版调用

1、打开文章模板【templets/default/article_article.htm】

2、在<head></head>插入jquery库,你也可以用你本地的库文件;

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

3、在文章模板安装点赞按键,将下面代码插入到你想要显示的地方;

<!-- 点赞 start-->
<div>
  <span class="zan"><a href='javascript:void(0);' title="赞一个 "  rel="{dede:field.id/}"><script src="{dede:field name='phpurl'/}/zan.count.php?aid={dede:field.id/}" type='text/javascript' language="javascript"></script></a></span>
  
    <script language="javascript" type="text/javascript">
    $(function(){ 
      $(".zan a").click(function(){ 
          var zan = $(this); 
          var id = zan.attr("rel"); //对应id 
          zan.fadeOut(300); //渐隐效果 
          $.ajax({ 
              type:"POST", 
              url:"{dede:field name='phpurl'/}/zan.php", 
              data:"id="+id, 
              cache:false, //不缓存此页面 
              success:function(data){ 
                  zan.html(data); 
                  zan.fadeIn(300); //渐显效果 
              } 
          }); 
          return false; 
      }); 
  });
    </script>
  </div><!-- 点赞 end-->

七、进阶版,可以后台设置文章的点赞初始值

为了让每篇新文章的点赞量初始值有一个随机数值,而不是0,看起来有人气

可以参考【织梦DedeCMS修改文档默认点击量和随机增加量-CSDN博客】这篇文章如何设置初始值;


http://www.kler.cn/a/595961.html

相关文章:

  • Linux安装go环境
  • WebDeveloper靶机详解
  • vue3组合式API、状态库Pinia、打包工具Vite
  • 51c自动驾驶~合集24
  • LeetCode 134. 加油站 java题解
  • java生成一个可以下载的word文件
  • 2025信创即时通讯排行:安全合规与生态适配双轮驱动
  • java string 类型转list实体类且忽略实体类中没有的字段
  • java查询es超过10000条数据
  • VS代码生成工具ReSharper v2024.3——支持C# 13
  • Redis-分布式锁实现秒杀
  • 通过 TTL 识别操作系统的原理详解
  • 【leetcode hot 100 39】组合总和
  • leetcode每日一题:最大或值
  • 发现一个好用的Vue.js内置组件
  • Bitcoin Thunderbolt 内测通道开启,加速比特币交易新时代
  • 大数据从入门到入魔系列————探索大数据前世今生之迷
  • 快速入手-基于Django的mysql操作(四)
  • stressapptest交叉编译(ARM64)
  • 批量删除 PPT 文档中的宏