对文章的顶踩也就是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越做越好!