dede如何调用顶踩次数?

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

下面我将为你提供最常用、最标准的方法,以及一些进阶用法。

dede调用顶踩次数
(图片来源网络,侵删)

核心原理

织梦的顶踩功能是通过一个JS函数 digg() 来实现的,这个函数会向一个特定的PHP文件发送请求,更新数据库中的顶踩数,在模板中,我们只需要调用织梦内置的函数来从数据库读取并显示这些数字即可。


使用织梦内置的 GetArcVote() 函数(推荐)

这是最简单、最标准的方法,适用于列表页(如 index.htm, list_article.htm页(如 article_article.htm)。

步骤 1: 在模板文件中调用

在需要显示顶踩次数的地方,直接使用织梦的标签。

在列表页(如 index.htm)中调用

dede调用顶踩次数
(图片来源网络,侵删)
{dede:arclist titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用顶踩次数 -->
        <span class="diggnum">顶: [field:goodpost/]</span>
        <span class="digdownnum">踩: [field:badpost/]</span>
    </li>
{/dede:arclist}

页(如 article_article.htm)中调用 页,调用方式略有不同,通常使用 {dede:field}

<h1>[field:title/]</h1>
<div class="info">
    <!-- 调用顶踩次数 -->
    顶: <span class="diggnum">[field:goodpost/]</span> | 
    踩: <span class="digdownnum">[field:badpost/]</span>
</div>
<!-- 其他内容... -->

参数说明:

  • [field:goodpost/]:获取文章的“顶”的数量。
  • [field:badpost/]:获取文章的“踩”的数量。

步骤 2: 确保JS文件被正确加载

顶踩功能需要依赖一个JavaScript文件 digg.js 来处理用户的点击事件,请确保你的模板文件中引入了这个JS文件。

这个JS文件位于 /include/dedeajax2.js/images/digg.js

在模板的 <head> 标签内或页面底部加入以下代码:

<script type="text/javascript" src="{dede:global.cfg_cmspath/}/include/dedeajax2.js"></script>
<script type="text/javascript" src="{dede:global.cfg_cmspath/}/images/digg.js"></script>

重要提示: {dede:global.cfg_cmspath/} 会自动替换为你网站的根目录路径,确保JS文件能被正确找到。


手动编写函数(更灵活)

如果你发现内置函数在某些情况下不工作,或者需要更复杂的显示逻辑,你可以自己创建一个函数。

步骤 1: 在底层函数文件中添加自定义函数

打开 /include/arc.archives.class.php 文件(如果是内容页)或 /include/arc.listview.class.php(如果是列表页),在文件末尾的 ?> 之前,添加以下代码:

/**
 * 获取文章的顶踩次数
 * @param int $aid 文章ID
 * @return string 返回格式化后的顶踩字符串
 */
function GetArcVote($aid)
{
    global $dsql;
    $row = $dsql->GetOne("SELECT goodpost, badpost FROM `#@__archives` WHERE id = $aid");
    if (is_array($row)) {
        return "顶:{$row['goodpost']} | 踩:{$row['badpost']}";
    } else {
        return "顶:0 | 踩:0";
    }
}

步骤 2: 在模板中调用

你可以在任何模板文件中使用 {dede:mytag} 来调用这个新函数。

在列表页({dede:arclist})中调用

{dede:arclist titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用自定义函数 -->
        [field:id function="GetArcVote(@me)"/]
    </li>
{/dede:arclist}

页({dede:field})中调用

<h1>[field:title/]</h1>
<div class="info">
    <!-- 调用自定义函数 -->
    {dede:field.id function="GetArcVote(@me)"/}
</div>

完整示例:内容页顶踩功能实现

页顶踩功能,不仅需要显示数字,还需要让用户能够点击。

模板文件 (article_article.htm)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
    <!-- 引入JS文件 -->
    <script type="text/javascript" src="{dede:global.cfg_cmspath/}/include/dedeajax2.js"></script>
    <script type="text/javascript" src="{dede:global.cfg_cmspath/}/images/digg.js"></script>
</head>
<body>
    <h1>{dede:field.title/}</h1>
    <div class="info">
        <span>作者:{dede:field.writer/}</span> |
        <span>时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/}</span> |
        <!-- 显示顶踩次数 -->
        <span>顶: <span class="diggnum">{dede:field.goodpost/}</span></span> |
        <span>踩: <span class="digdownnum">{dede:field.badpost/}</span></span>
    </div>
    <div class="content">
        {dede:field.body/}
    </div>
    <!-- 顶踩区域 -->
    <div class="diggbox">
        <div class="diggbox digg_good">
            <div id="digg_good" class="digg_num">{dede:field.goodpost/}</div>
            <div class="digg_percent"><span id="goodper">{dede:goodper/}%</span></div>
            <div class="digg_btn"><a href="javascript:;" onclick="digg('good')">顶一下</a></div>
        </div>
        <div class="diggbox digg_bad">
            <div id="digg_bad" class="digg_num">{dede:field.badpost/}</div>
            <div class="digg_percent"><span id="badper">{dede:badper/}%</span></div>
            <div class="digg_btn"><a href="javascript:;" onclick="digg('bad')">踩一下</a></div>
        </div>
    </div>
    <script type="text/javascript">
        // 用于顶踩后无刷新更新数据
        function getDigg(aid)
        {
            var taget_obj = document.getElementById('digg_good');
            var taget_obj2 = document.getElementById('digg_bad');
            var myajax = new DedeAjax(taget_obj, false, false, '', '', false);
            myajax.SendGet2("/plus/digg_ajax.php?aid=" + aid + "&action=good");
            myajax = new DedeAjax(taget_obj2, false, false, '', '', false);
            myajax.SendGet2("/plus/digg_ajax.php?aid=" + aid + "&action=bad");
            DedeXHTTP = null;
        }
    </script>
</body>
</html>

代码解释:

  • {dede:field.goodpost/}{dede:field.badpost/}:显示当前的顶踩数。
  • {dede:goodper/}{dede:badper/}:显示顶踩的百分比(织梦内置函数)。
  • onclick="digg('good')"onclick="digg('bad')":这是 digg.js 中的核心函数,会向 /plus/digg_ajax.php 发送请求。
  • getDigg(aid):这个函数会在用户投票后,通过AJAX请求更新页面上的数字,实现无刷新效果。

总结与排查

如果顶踩功能不工作,请按以下顺序检查:

  1. JS文件路径是否正确:确认 {dede:global.cfg_cmspath/} 生成的路径是正确的,浏览器能加载到 dedeajax2.jsdigg.js
  2. 模板标签是否正确:确认使用了 [field:goodpost/][field:badpost/] 等正确的标签。
  3. 数据库是否有数据:登录后台,查看某篇文章的“顶”和“踩”字段是否有数字,如果没有,先去文章页面手动点击几次“顶”或“踩”来生成数据。
  4. 文件权限:确保 /plus/digg_ajax.php 文件可执行(通常服务器默认权限即可)。
  5. JS冲突:检查页面中是否有其他JavaScript库(如jQuery)与织梦的AJAX代码冲突,可以尝试暂时禁用其他JS来排查。

通常情况下,方法一 就能满足绝大多数需求,是最推荐的做法。

-- 展开阅读全文 --
头像
dede表格隔行换色如何实现?
« 上一篇 今天
哪种C语言编程软件最适合初学者?
下一篇 » 今天

相关文章

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