DEDE_v5.3/V5.5 实现首页、栏目页调用Digg,附Js+PHP源代码

先感叹一下,现在的Ajax框架真是多如牛毛,用得熟的真没几个。真是暴殄天物,罪过。:)
DEDE用的AjaxJs文件还没有细读过,但是感觉也挺好用的,但是,在文章内容页中,要求使用网站的决对路径,造成页面中大量的重复代码,稍稍有些洁癖的我,感觉有些刺眼。

今天在给美文网改版的时候,要用到一个单独的Digg页面,以调用近期的文章Dig排行。然后就需要修改一下DEDE的Ajax代码了,以下是完整的Js代码和程序文件,仅供参考。

首先,要明白DEDE返回Digg数据的方式。简单来说,DEDE现在的Digg功能,是通过/plus/digg_ajax.php查询并输出的,输出的数据,含有CSS样式和Digg数据,相对来说,是比较简单的Ajax运用。

在列表处,我不想使用差评的功能,因为这样可能造成一些用户的恶意点击,也会占用更多的一些页面空间。要实现这样的功能,就需要修改DEDE的程序代码,但是为了程序的兼容,我们可以复制/plus/digg_ajax.php,并命名为/plus/digg_ajax_list.php,输出不同的CSS样式。

/plus/digg_ajax_list.php 中,我做了一些代码精简,只输出好评的数量和几句CSS样式,需要的朋友下载下边的附件即可。

[php]$digg = '<div class="downimg" onclick="postDigg(\'good\','.$id.')">
<div class="digg_num">'.$row['goodpost'].'</div><div class="digg_act">很喜欢</div>
</div >';[/php]

然后,设计了一个列表页模板,我用的是一个自由列表。模板中,需要加上以下的代码,用以提交和调用digg信息。

[js]<script language="javascript" type="text/javascript" src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script>
<script language="javascript" type="text/javascript">
<!--
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) { 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('digg'+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) { 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_list.php?action="+ftype+"&id="+aid;
myajax.SendGet2(url);
DedeXHTTP = null;
}
function getDigg(aid)
{
//列表中有多个DIGG的元素
var taget_obj = document.getElementById('digg' + aid);
myajax = new DedeAjax(taget_obj,false,false,'','','');
myajax.SendGet2("{dede:global.cfg_phpurl/}/digg_ajax_list.php?id="+aid);
DedeXHTTP = null;
}
-->
</script>[/js]

js代码部份,只修改了红色的地方,即Digg数据返回程序页面和页面Digg输出的标记ID
然后,调用Digg即可:

[js]<li><span id='digg[field:id/]'></span><script>getDigg([field:id/]);</script></li>[/js]

程序演示地址:http://www.mmtxt.net/digg.php

以下完整的程序代码:

dede_v53_digg

发表评论