欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

DEDECMS首页DIGG调用方法

shiping1 的头像

对文章的顶踩也就是DIGG功能,实现这个功能的代码就包含在function postDigg(ftype,aid)

 

DEDECMS首页DIGG调用方法

Posted on: 星期四, 九 17, 2009

   DEDE在官方首页也有一个DEDE的功能,不论这个DIGG功能在哪里,用到的都是AJAX,想了解的朋友可以去看看坛子
里的其他帖子比如ajax无刷新的评论实现。
    在文章页里都有DIGG功能,如果首页需要加digg就要从这里CV啦..下面看文章页的script文件

 

Copy code
<script language="javascript" type="text/javascript">
<!–
function CheckLogin(){
    var taget_obj = document.getElementById(‘_ajax_feedback’);
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    myajax.SendGet2("{dede:global.cfg_cmsurl/}/member/ajax_feedback.php");
    DedeXHTTP = null;
}
function checkSubmit(){
    if(document.feedback.msg.value!=”) document.feedback.submit();
    else alert("评论内容不能为空!");
}
function postBadGood(ftype,fid)
{
    var taget_obj = document.getElementById(ftype+fid);
    var saveid = GetCookie(‘badgoodid’);
    if(saveid != null)
    {
        var saveids = saveid.split(‘,’);
        var hasid = false;
        saveid = ”;
        j = 1;
        for(i=saveids.length-1;i>=0;i–)
        {
            if(saveids[i]==fid && hasid) continue;
            else {
                if(saveids[i]==fid && !hasid) hasid = true;
                saveid += (saveid==” ? saveids[i] : ‘,’+saveids[i]);
                j++;
                if(j==10 && hasid) break;
                if(j==9 && !hasid) break;
            }
        }
        if(hasid) { alert(‘您刚才已表决过了喔!’); return false;}
        else saveid += ‘,’+fid;
        SetCookie(‘badgoodid’,saveid,1);
    }
    else
    {
        SetCookie(‘badgoodid’,fid,1);
    }
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    myajax.SendGet2("{dede:field name=’phpurl’/}/feedback.php?aid="+fid+"&action="+ftype+"&fid="+fid);
    DedeXHTTP = null;
}
function postDigg(ftype,aid)
{
    var taget_obj = document.getElementById(‘newdigg’);
    var saveid = GetCookie(‘diggid’);
    if(saveid != null)
    {
        var saveids = saveid.split(‘,’);
        var hasid = false;
        saveid = ”;
        j = 1;
        for(i=saveids.length-1;i>=0;i–)
        {
            if(saveids[i]==aid && hasid) continue;
            else {
                if(saveids[i]==aid && !hasid) hasid = true;
                saveid += (saveid==” ? saveids[i] : ‘,’+saveids[i]);
j++;
                if(j==20 && hasid) break;
                if(j==19 && !hasid) break;
            }
        }
        if(hasid) { alert("您已经顶过该帖,请不要重复顶帖 !"); return; }
        else saveid += ‘,’+aid;
        SetCookie(‘diggid’,saveid,1);
    }
    else
    {
        SetCookie(‘diggid’,aid,1);
    }
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    var url = "{dede:global.cfg_phpurl/}/digg_ajax.php?action="+ftype+"&id="+aid;
    myajax.SendGet2(url);
    DedeXHTTP = null;
}
function getDigg(aid)
{
    var taget_obj = document.getElementById(‘newdigg’);
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    myajax.SendGet2("{dede:global.cfg_phpurl/}/digg_ajax.php?id="+aid);
    DedeXHTTP = null;
}

–>
</script>

 

 

在这个里面有几个js函数
 

Copy code
function CheckLogin()                     //这个检查登录    
function checkSubmit()                         //这个提交评论
function postBadGood(ftype,fid)                  //   这个评论的顶和踩
function postDigg(ftype,aid)                     //这个文章的顶和踩  
function getDigg(aid)                        

 

这里用到的当然就是对文章的顶踩也就是DIGG功能,实现这个功能的代码就包含在function postDigg(ftype,aid) ,
我们把它单独的列出来…
 

Copy code

function postDigg(ftype,aid)
{
    var taget_obj = document.getElementById(‘newdigg’);
    var saveid = GetCookie(‘diggid’);
    if(saveid != null)
    {
        var saveids = saveid.split(‘,’);
        var hasid = false;
        saveid = ”;
        j = 1;
        for(i=saveids.length-1;i>=0;i–)
        {
            if(saveids[i]==aid && hasid) continue;
            else {
  
              if(saveids[i]==aid && !hasid) hasid = true;
                saveid += (saveid==” ? saveids[i] : ‘,’+saveids[i]);
                j++;
                if(j==20 && hasid) break;
                if(j==19 && !hasid) break;
            }
        }
        if(hasid) { alert("您已经顶过该帖,请不要重复顶帖 !"); return; }
        else saveid += ‘,’+aid;
        SetCookie(‘diggid’,saveid,1);
    }
    else
{
        SetCookie(‘diggid’,aid,1);
    }
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    var url = "{dede:global.cfg_phpurl/}/digg_ajax.php?action="+ftype+"&id="+aid;
    myajax.SendGet2(url);
    DedeXHTTP = null;
}
function getDigg(aid)
{
    var taget_obj = document.getElementById(‘newdigg’);
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    myajax.SendGet2("{dede:global.cfg_phpurl/}/digg_ajax.php?id="+aid);
    DedeXHTTP = null;
}
 

 

那么。怎么在首页实现我们的digg功能呢…在js函数里有几句代码很重要

 

Copy code
    var taget_obj = document.getElementById(‘newdigg’);
    myajax.SendGet2("{dede:global.cfg_phpurl/}/digg_ajax.php?id="+aid);
    DedeXHTTP = null;

 

因为是采用了ajax的方式,所以这里就需要定义一个taget_obj 来显示ajax回应的数据

myajax.SendGet2是dede自带的ajax包装函数,这里大家可以不用管它,只是管它的目标就可以了,

也就是digg_ajax.php。雷同于一个form表单而已。

 

Copy code
myajax.SendGet2("{dede:global.cfg_phpurl/}/digg_ajax.php?id="+aid);

 

===================================================

下面来说说我们页面的具体实现. 哎..dede的编辑太累了。

   要在首页实现digg,首页需要包含dede的ajax函数
 

Copy code

<script language="javascript" type="text/javascript" src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script>
….

 

还需要添加上面的js代码块,也就是和文章页的模板head部分要保持一致,这样比较容易修改。

当然这样还是不够的,我们可以copy一个digg_ajax.php文件,命名为digg_index.php表示实现首页的Digg功能,放在和

digg_ajax.php一样的目录,内容也一样.

这样的首页的相关js代码就需要更改ajax的目标地址
 

Copy code
myajax.SendGet2("{dede:global.cfg_phpurl/}/digg_index.php?id="+aid);

 

从js我们知道,对象id为"’newdigg’"为我们ajax回应信息的容易,也就是
 

Copy code
<div id=’newdigg’>
         …….
</div>

 

当我们顶贴后,回显的信息就会被ajax显示在这个div层里。所以我们也要调整这个div的内容,让它的内容和

digg_ajax.php的$digg变量的内容保持一致。

因为我之前测试的一套模板被我误删了,这里就不能拿实际模板给大家讲解了,我用简单的方法演示下
 

Copy code
<div id=’newdigg_{dede:field.id/}’>
         <span id=’good’  onclick="javascript:postDigg(‘good’,{dede:field.id/})">{dede:field.goodpost/}</span>
         <span  id=’bad’  onclick="javascript:postDigg(‘bad’,{dede:field.id/})">{dede:field.badpost/}</span>
</div>
<script language="javascript" type="text/javascript">getDigg({dede:field.id/});</script>

 

这个就是首页实现的基本模板代码,这个id=’newdigg_{dede:field.id/}’是因为首页不同于文章页,

digg有多个,如果不区分,ajax不会知道替换哪里的内容。我们依照ID值就能很好的区分。既然div的ID更改了,我们

自然也就要修改js的相关代码

 

Copy code

function postDigg(ftype,aid)
{
    var taget_obj = document.getElementById(‘newdigg_’+aid);
    var saveid = GetCookie(‘diggid’);
    if(saveid != null)
    {
        var saveids = saveid.split(‘,’);
        var hasid = false;
        saveid = ”;
        j = 1;
        for(i=saveids.length-1;i>=0;i–)
        {
 if(saveids[i]==aid && hasid) continue;
            else {
                if(saveids[i]==aid && !hasid) hasid = true;
                saveid += (saveid==” ? saveids[i] : ‘,’+saveids[i]);
                j++;
                if(j==20 && hasid) break;
                if(j==19 && !hasid) break;
            }
        }
        if(hasid) { alert("您已经顶过该帖,请不要重复顶帖 !"); return; }
        else saveid += ‘,’+aid;
        SetCookie(‘diggid’,saveid,1);
    }
    else
    {
        SetCookie(‘diggid’,aid,1);
    }
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    var url = "{dede:global.cfg_phpurl/}/index_ajax.php?action="+ftype+"&id="+aid;
    myajax.SendGet2(url);
    DedeXHTTP = null;
}
function getDigg(aid)
{
    var taget_obj = document.getElementById(‘newdigg_’+aid);
    myajax = new DedeAjax(taget_obj,false,false,”,”,”);
    myajax.SendGet2("{dede:global.cfg_phpurl/}/index_ajax.php?id="+aid);
    DedeXHTTP = null;
}

 

 

这个就是部分的js代码。

接下来我们修改

index_digg.php的返回数据,也就是$digg中的值

部分代码:
 

Copy code

 

$digg = ‘  <span id=’good’  onclick="javascript:pos
tDigg(‘good’,’.$id.’)">’.$row['goodpost'].’</span>
                   <span  id=’bad’  onclick="javascript:postDigg(‘bad’,’.$id.’)">’.$row['badpost'].’</span>’;
AjaxHead();
echo $digg;
exit();

 

嗯…大概就是这个样子,细节当然还是大家自己去调整,这个代码页是临时的我也没有测试。

暂时好像还没有其他的了…

欢迎大家提出问题一起讨论

欢迎开源的东西,也希望大家支持DEDE越做越好!
 
 

 来自 http://www.guoxiongjie.com/23/

 

普通分类: