原因:vBulletin本身没有自带,而这个功能颇有趣,既然UBB可以,我也可以。
优点:支持IE、NN两个最主流浏览器,幻影式变换;可以通过控制面板管理新闻;不需要修改原数据库结构,也不增加数据表。
缺点:又占了首页的显示地方。
自评:是一个网友要求增加的HACK,从雨声得到的启发和做法。挺有趣的。
范例:http://gogosoft.oso.com.cn/forum/index.php
步骤:
⒈打开 index.php ,在适当位置,例如“
$tempforumbits = "";
$forumbits = "";
$categorys=$DB_site->query("SELECT categoryid,title,displayorder FROM category WHERE displayorder<>0 ORDER BY displayorder");
while ($category=$DB_site->fetch_array($categorys)) {
”后面加入“
// Hack newsfade
$newsfadebits = "";
$newsfades=$DB_site->query("SELECT title,pagetext FROM announcement WHERE enddate>=$datenow AND forumid=0 ORDER BY startdate DESC");
while ($newsfade=$DB_site->fetch_array($newsfades)) {
$newsfadebits.=""".addslashes($newsfade[pagetext])."","$newsfade[title]",n";
}
$newsfadebits = substr($newsfadebits,0,-2);
// End Hack newsfade
”,保存退出。
⒉打开 admin/index.php ,查找“
<table width="100%" border=0 cellpadding=0 cellspacing=0 align="center"><tr><td bgcolor="#336699">
<table width="100%" border=0 cellpadding=3 cellspacing=2>
<tr>
<td align="right"><font color="#ffffff"><p><b>公告</b></p></td>
</tr>
<td bgcolor="#ffffff"><P>
<a href="announcement.php?action=add">新增</a><br>
<a href="announcement.php?action=modify">修改</a></p></td>
</tr>
</table>
</td></tr></table>
<BR>
”,在后面加入“
<table width="100%" border=0 cellpadding=0 cellspacing=0 align="center"><tr><td bgcolor="#336699">
<table width="100%" border=0 cellpadding=3 cellspacing=2>
<tr>
<td align="right"><font color="#ffffff"><p><b>新闻</b></p></td>
</tr>
<td bgcolor="#ffffff"><P>
<a href="newsfade.php?action=add">新增</a><br>
<a href="newsfade.php?action=modify">修改</a></p></td>
</tr>
</table>
</td></tr></table>
<BR>
”,保存退出。
⒊将以下内容粘贴为新文件 fade.js :“
FDRboxWid = 600;
FDRboxHgt = 30;
FDRborWid = 0;
FDRborCol = "#070707";
FDRborSty = "solid";
FDRbackCol = "#f7f7f7";
FDRboxPad = 4;
FDRtxtAln = "center";
FDRlinHgt = "25pt";
FDRfntFam = "Verdana,Arial,Helvetica,sans-serif,宋体";
FDRfntCol = "#000080";
FDRfntSiz = "20pt";
FDRfntWgh = "";
FDRfntSty = "normal";
FDRlnkCol = "#000080";
FDRlnkDec = "underline";
FDRhovCol = "#2f2f4f";
FDRgifSrc = "images/fade.gif";
FDRgifInt = 60;
FDRblendInt = 6;
FDRblendDur = 1;
FDRmaxLoops = 100;
FDRendWithFirst = true;
FDRreplayOnClick = true;
FDRjustFlip = false;
FDRhdlineCount = 0;
NS4 = (document.layers);
IE4 = (document.all);
appVer = navigator.appVersion;
IEmac = (IE4 && appVer.indexOf("Mac") != -1);
IE4mac = (IEmac && appVer.indexOf("MSIE 4") != -1);
IE40mac = (IE4mac && appVer.indexOf("4.0;") != -1);
IE45mac = (IE4mac && appVer.indexOf("4.5;") != -1);
NSpre401 = (NS4 && (parseFloat(appVer) <= 4.01));
NSpre403 = (NS4 && (parseFloat(appVer) <= 4.03));
FDRjustFlip = (window.FDRjustFlip) ? FDRjustFlip : false;
FDRhdlineCount = (window.FDRhdlineCount) ? FDRhdlineCount : 1;
FDRfinite = (FDRmaxLoops > 0);
FDRisOver = false;
FDRloadCount = 0;
blendTimer = null;
if (!window.prefix) prefix = "";
window.onload = FDRcountLoads;
if (NS4) {
if(FDRjustFlip || NSpre403) {
totalLoads = 1;
FDRfadeImg = new Object();
FDRfadeImg.width = FDRboxWid - (FDRborWid*2);;
}
else {
totalLoads = 2;
FDRfadeImg = new Image();
FDRfadeImg.onload = FDRcountLoads;
FDRfadeImg.onerror = FDRcountLoads;
FDRfadeImg.src = FDRgifSrc;
}
}
function FDRcountLoads(e) {
if (IE4) {
setTimeout("FDRinit()",1);
}
else {
if(e.type == "error") FDRjustFlip = true;
FDRloadCount++;
if (FDRloadCount==totalLoads) {
origWidth = innerWidth;
origHeight = innerHeight;
window.onresize = function(){
if (innerWidth==origWidth && innerHeight==origHeight) return;
location.reload();
}
FDRinit();
}
}
}
function FDRinit(){
if(!window.arNews) {
if(!window.arTXT || !window.arURL) return;
if(arTXT.length != arURL.length) return;
arNews = [];
for (i=0;i<arTXT.length;i++){
arNews[arNews.length] = arTXT[i];
arNews[arNews.length] = arURL[i];
}
}
if (NS4) {
if (!document.elFader) return;
with(document.classes.newslink.A) {
textDecoration = FDRlnkDec;
color = FDRlnkCol;
fontWeight = FDRfntWgh;
fontSize = FDRfntSiz;
fontStyle = FDRfntSty;
fontFamily = FDRfntFam;
lineHeight = FDRlinHgt;
textAlign = FDRtxtAln;
}
with(document.classes.nolink.P) {
color = FDRfntCol;
fontWeight = FDRfntWgh;
fontSize = FDRfntSiz;
fontStyle = FDRfntSty;
fontFamily = FDRfntFam;
lineHeight = FDRlinHgt;
textAlign = FDRtxtAln;
}
elFader = document.elFader;
with (elFader) {
document.write(" ");
document.close();
bgColor = FDRborCol;
clip.width = FDRboxWid;
clip.height = FDRboxHgt;
}
contWidth = FDRboxWid - (FDRborWid*2);
contHeight = FDRboxHgt - (FDRborWid*2);
elCont = new Layer(contWidth,elFader);
with (elCont) {
top = FDRborWid;
left = FDRborWid;
clip.width = contWidth;
clip.height = contHeight;
bgColor = FDRbackCol;
visibility = "inherit";
}
newsWidth = contWidth - (FDRboxPad*2);
newsHeight = contHeight - (FDRboxPad*2);
elNews = new Layer(newsWidth,elCont);
with (elNews) {
top = FDRboxPad;
left = FDRboxPad;
clip.width = newsWidth ;
clip.height = newsHeight;
}
if (!FDRjustFlip) {
elGif = new Layer(contWidth,elCont);
imStr = "<IMG SRC='" + FDRgifSrc +"' WIDTH="+ Math.max(FDRfadeImg.width,(FDRboxWid - (FDRborWid*2)));
imStr += (NSpre403) ? " onError='window.FDRjustFlip = true'>" : ">";
with (elGif) {
document.write(imStr);
document.close();
moveAbove(elNews);
}
imgHeight = elGif.document.height;
slideInc = (imgHeight/(FDRblendDur*1000/FDRgifInt));
startTop = -(imgHeight - FDRboxHgt);
}
elFader.visibility = "show";
}
else {
if (!window.elFader) return;
elFader.innerHTML ="";
if(IE4mac) {
document.body.insertAdjacentHTML("BeforeBegin","<STYLE></STYLE>");
}
else {
if (!document.styleSheets.length) document.createStyleSheet();
}
with (document.styleSheets(document.styleSheets.length-1)) {
addRule("A.newslink","text-decoration:"+FDRlnkDec+";color:"+ FDRlnkCol);
addRule("A.newslink:hover","color:"+ FDRhovCol);
}
with (elFader.style) {
errorOffset = (IE4mac) ? (FDRboxPad + FDRborWid) : 0;
width = FDRboxWid - (errorOffset * 2);
height = FDRboxHgt - (errorOffset * 2);
if(IE4mac && !IE45mac){
pixelLeft = elFader.offsetLeft + errorOffset;
pixelTop = elFader.offsetTop + errorOffset;
}
backgroundColor = FDRbackCol;
overflow = "hidden";
color = FDRfntCol;
fontWeight = FDRfntWgh;
fontSize = FDRfntSiz;
fontStyle = FDRfntSty;
fontFamily = FDRfntFam;
lineHeight = FDRlinHgt;
textAlign = FDRtxtAln;
cursor = "default";
visibility = "visible";
borderWidth = FDRborWid;
borderStyle = FDRborSty;
borderColor = FDRborCol;
padding = FDRboxPad;
if(!FDRjustFlip) filter = "blendTrans(duration=" + FDRblendDur + ")";
}
elFader.onselectstart = function(){return false};
IEhasFilters = (elFader.filters.blendTrans) ? true : false;
}
if (!NSpre401) {
elFader.onmouseover = function (){
FDRisOver = true;
}
elFader.onmouseout = function(){
FDRisOver = false;
status = "";
}
}
FDRstart(0);
}
function FDRstart(ind){
newsCount = ind;
if (FDRfinite) loopCount = 0;
FDRdo();
blendTimer = setInterval("FDRdo()",FDRblendInt*1000)
}
function FDRdo() {
if(!blendTimer && loopCount>0) return;
if (FDRfinite && loopCount==FDRmaxLoops) {
FDRend();
return;
}
FDRfade();
if (newsCount == arNews.length) {
newsCount = 0;
if (FDRfinite) loopCount++;
}
}
function FDRmakeStr(){
tempStr = "";
for (i=0;i<FDRhdlineCount;i++){
if(newsCount>=arNews.length)break;
dispStr = arNews[newsCount];
linkStr = arNews[newsCount+1];
isLink = linkStr.length;
if (isLink) {
tempStr += "<P><A CLASS=newslink "
+ "HREF='" + prefix + linkStr + "'>"
+ dispStr + "</A></P>"
}
else {
tempStr += ((NS4) ? "<P CLASS=nolink>" : "<P>") +dispStr+"</P>";
}
if(IE40mac) tempStr +="<BR>";
newsCount += 2;
}
return tempStr;
}
function FDRfade(){
newsStr = FDRmakeStr();
if (NS4) {
if (!FDRjustFlip) {
elGif.top = startTop;
elGif.visibility = "inherit";
}
elNews.visibility = "hide";
with (elNews.document) {
write(newsStr);
close();
}
elNews.visibility = "inherit";
}
else {
if(IEhasFilters)elFader.filters.blendTrans.Apply();
elFader.innerHTML = newsStr;
if(IEhasFilters)elFader.filters.blendTrans.Play();
}
if(FDRhdlineCount==1) window.status = (FDRisOver && isLink) ? (prefix + linkStr) : "";
if (NS4 && !FDRjustFlip) FDRslide();
}
function FDRslide(){
elGif.top += slideInc;
if (elGif.top >= 0) {elGif.visibility = "hide";return}
setTimeout("FDRslide()",FDRgifInt);
}
function FDRdblClickNS(){
elFader.releaseEvents(Event.DBLCLICK);
FDRstart(startIndex);
return false;
}
function FDRend(){
clearInterval(blendTimer);
blendTimer = null;
if (FDRendWithFirst) {
newsCount = 0;
FDRfade();
}
if (FDRreplayOnClick) {
startIndex = FDRendWithFirst ? (FDRhdlineCount * 2) : 0;
if (IE4) {
elFader.title = "Double click to replay";
elFader.ondblclick = function(){
this.ondblclick = null;
this.title = "";
FDRstart(startIndex);
}
}
else {
elFader.captureEvents(Event.DBLCLICK);
elFader.ondblclick = FDRdblClickNS;
}
}
}
”,并且建立一半透明GIF文件 fade.gif(例如 http://gogosoft.oso.com.cn/forum/images/fade.gif),上载到 images 目录下,以用于NN模仿淡出淡入的效果。
⒋将以下内容粘贴为新文件 admin/newsfade.php :“
<?php
require ("global.php");
?>
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php
if (isset($action)==0) {
$action="modify";
}
// ###################### Start add #######################
if ($action=="add") {
echo doformheader("newsfade","insert");
echo "<table border=0>";
echo makeinputcode("连接 URL","title");
echo makeinputcode("开始日期(格式: yyyy-mm-dd)","startdate",date("Y-m-d",time()));
echo makeinputcode("结束日期(格式: yyyy-mm-dd)","enddate",date("Y-m-d",time()));
echo makeinputcode("新闻内容(您可以使用HTML)","pagetext");
echo doformfooter();
}
// ###################### Start insert #######################
if ($action=="insert") {
$DB_site->query("INSERT INTO announcement(announcementid,title,userid,startdate,enddate,pagetext,forumid) VALUES (NULL,'".addslashes($title)."',$bbuserid,UNIX_TIMESTAMP('".addslashes($startdate)."'),UNIX_TIMESTAMP('".addslashes($enddate)."'),'".addslashes($pagetext)."',0)");
$action="modify";
echo "<p>记录已经增加</p>";
}
// ###################### Start edit #######################
if ($action=="edit") {
$newsfade=$DB_site->query_first("SELECT title,userid,FROM_UNIXTIME(startdate) AS startdate,FROM_UNIXTIME(enddate) AS enddate,pagetext,forumid FROM announcement WHERE announcementid=$newsfadeid");
echo doformheader("newsfade","doupdate");
echo makehiddencode("newsfadeid","$newsfadeid");
echo "<table border=0>";
echo makeinputcode("标题","title",$newsfade[title]);
echo makeinputcode("开始日期(格式: yyyy-mm-dd)","startdate",$newsfade[startdate]);
echo makeinputcode("结束日期(格式: yyyy-mm-dd)","enddate",$newsfade[enddate]);
echo maketextareacode("新闻内容(您可以使用HTML)","pagetext",$newsfade[pagetext]);
echo doformfooter();
}
// ###################### Start do update #######################
if ($action=="doupdate") {
$DB_site->query("UPDATE announcement SET title='".addslashes($title)."',userid=$bbuserid,startdate=UNIX_TIMESTAMP('".addslashes($startdate)."'),enddate=UNIX_TIMESTAMP('".addslashes($enddate)."'),pagetext='".addslashes($pagetext)."',forumid=0 WHERE announcementid=$newsfadeid");
echo "<p>记录已经更新!</p>";
$action="modify";
}
// ###################### Start Remove #######################
if ($action=="remove") {
echo "<p>您确认要删除选择的记录吗?</p>n";
echo "<p><a href='newsfade.php?newsfadeid=$newsfadeid&action=kill'>是</a></p>";
}
// ###################### Start Kill #######################
if ($action=="kill") {
$DB_site->query("DELETE FROM announcement WHERE announcementid=$newsfadeid");
$action="modify";
}
// ###################### Start modify #######################
if ($action=="modify") {
$newsfades=$DB_site->query("SELECT announcementid AS newsfadeid,pagetext,title FROM announcement WHERE forumid=0 ORDER BY startdate");
echo "<ul>";
while ($newsfade=$DB_site->fetch_array($newsfades)) {
echo "<li><a href=$newsfade[title]>$newsfade[pagetext]</a> <a href='newsfade.php?action=edit&newsfadeid=$newsfade[newsfadeid]'>[编辑]</a> <a href='newsfade.php?action=remove&newsfadeid=$newsfade[newsfadeid]'>[删除]</a></li>n";
}
echo "</ul><p>以上是全部的内容</p>";
}
?>
</body>
</html>
”。
⒌在《控制面板》编辑模板 forumhome ,查找“
$cssinclude
”,在后面加入“
<SCRIPT LANGUAGE='JavaScript1.2' TYPE='text/javascript'>
prefix="";
arNews = [
$newsfadebits
]
</SCRIPT>
<SCRIPT LANGUAGE='JavaScript1.2' SRC='fader.js' TYPE='text/javascript'></script>
”,查找“
<tr bgcolor="{tableheadbgcolor}">
<TD> </TD>
<td valign=bottom>
<smallfont COLOR="{tableheadtextcolor}"><B>论坛</B></smallfont>
</td>
<td NOWRAP valign=bottom align=center>
<b><smallfont COLOR="{tableheadtextcolor}">贴数</smallfont></B>
</td>
<td NOWRAP valign=bottom align=center>
<b><smallfont COLOR="{tableheadtextcolor}">话题</smallfont></B>
</td>
<td NOWRAP valign=bottom align=center>
<smallfont COLOR="{tableheadtextcolor}"><B>最新发表</B></smallfont>
</td>
<td valign=bottom>
<smallfont COLOR="{tableheadtextcolor}"><B>版主</B></smallfont>
</td></tr>
”,在前面加入“
<TR bgcolor="{categorybackcolor}" id=cat><TD colspan=6>
<normalfont color="{categoryfontcolor}"><B>论坛新闻</B></normalfont></td>
</tr>
<tr><td colspan=6 bgcolor="#f7f7f7" height=30 valign="top" align="center">
<div id="elFader" style="position:relative;visibility:hidden;width:500"><div align="center">论坛新闻</div></div>
</td></tr>
”,保存。
|