Seite 1 von 1

Problem mit BBCode Countdown

Verfasst: 14.01.2009 14:22
von FuGu
Moin Gemeinde,
ich habe folgenden BBCode Countdown eingepflanzt. Mein Problem ist, dass ich den Countdown gerne in der Signatur nutzen würde, jedoch wird er dann nur einmal pro Seite angezeigt. Soll heißen, wenn ich auf einer Seite sechs Beiträge schreibe, dann erscheint der Countdown in der Signatur immer nur im ersten Beitrag der Seite. Was muss ich ändern?

Nachfolgend der BBCode und die Countdown.js:

Code: Alles auswählen

[countdown]{TEXT1},{TEXT2}[/countdown]

Code: Alles auswählen

<script type="text/javascript">
TargetDate = "{TEXT1}";
BackColor = "";
ForeColor = "navy";
CountActive = true;
CountStepper = -1;
LeadingZero = true;
DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
FinishMessage = "{TEXT2}";
</script>
<script type="text/javascript" src="images/countdown.js"></script>
Dazu gehört diese countdown.js

Code: Alles auswählen

/*
Author: Robert Hashemian
http://www.hashemian.com/

You can use this code in any manner so long as the author's
name, Web address and this disclaimer is kept intact.
********************************************************
Usage Sample:

<script language="JavaScript">
TargetDate = "12/31/2020 5:00 AM";
BackColor = "palegreen";
ForeColor = "navy";
CountActive = true;
CountStepper = -1;
LeadingZero = true;
DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
FinishMessage = "It is finally here!";
</script>
<script language="JavaScript" src="http://scripts.hashemian.com/js/countdown.js"></script>
*/

function calcage(secs, num1, num2) {
  s = ((Math.floor(secs/num1))%num2).toString();
  if (LeadingZero && s.length < 2)
    s = "0" + s;
  return "<b>" + s + "</b>";
}

function CountBack(secs) {
  if (secs < 0) {
    document.getElementById("cntdwn").innerHTML = FinishMessage;
    return;
  }
  DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000));
  DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24));
  DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60));
  DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60));

  document.getElementById("cntdwn").innerHTML = DisplayStr;
  if (CountActive)
    setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod);
}

function putspan(backcolor, forecolor) {
 document.write("<span id='cntdwn' style='background-color:" + backcolor + 
                "; color:" + forecolor + "'></span>");
}

if (typeof(BackColor)=="undefined")
  BackColor = "white";
if (typeof(ForeColor)=="undefined")
  ForeColor= "black";
if (typeof(TargetDate)=="undefined")
  TargetDate = "12/31/2020 5:00 AM";
if (typeof(DisplayFormat)=="undefined")
  DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
if (typeof(CountActive)=="undefined")
  CountActive = true;
if (typeof(FinishMessage)=="undefined")
  FinishMessage = "";
if (typeof(CountStepper)!="number")
  CountStepper = -1;
if (typeof(LeadingZero)=="undefined")
  LeadingZero = true;


CountStepper = Math.ceil(CountStepper);
if (CountStepper == 0)
  CountActive = false;
var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
putspan(BackColor, ForeColor);
var dthen = new Date(TargetDate);
var dnow = new Date();
if(CountStepper>0)
  ddiff = new Date(dnow-dthen);
else
  ddiff = new Date(dthen-dnow);
gsecs = Math.floor(ddiff.valueOf()/1000);
CountBack(gsecs);

Re: Problem mit BBCode Countdown

Verfasst: 14.01.2009 14:26
von Dr.Death
Hallo,

da kannst Du nichts dran machen, da das JavaScript nur nach:

Code: Alles auswählen

document.getElementById("cntdwn")
sucht und das Element in der ersten Signatur findet.

Re: Problem mit BBCode Countdown

Verfasst: 14.01.2009 15:01
von Stonewoman
Hallo,

sonst nimm diesen Code:

BBCode-Benutzung:

Code: Alles auswählen

[count]{NUMBER1}.{TEXT} {NUMBER2}[/count]
HTML-Ersetzung:

Code: Alles auswählen

<script>
var eventdate = new Date("{TEXT} {NUMBER1}, {NUMBER2} 23:59:59 GMT");
d=new Date();
count=Math.floor((eventdate.getTime()-d.getTime())/1000);
count=Math.floor(count/(60*60*24));
document.write(count);
</script>
Tipp-Anzeige:

Code: Alles auswählen

Anzahl der Tage bis zum genannten Datum: [count]TT.Monat JJJJ[/count] Tag und Jahr nummerisch, Monat in Englisch
Ich hab das auch in der Signatur und klappt hervorragend.

Grüße, Stoni.

Re: Problem mit BBCode Countdown

Verfasst: 14.01.2009 15:16
von FuGu
@ Dr.Death
Ein Problem ohne Lösung? Unfassbar :o

@ Stonewoman
Danke für den Hinweis. Den Code nutze ich auch.. aber der andere macht ein bisschen mehr her finde ich.

Re: Problem mit BBCode Countdown

Verfasst: 14.01.2009 19:55
von 4seven
füge per java-zufallsgenerator (spektrum > 1.000.000 ) der id eine quasi-einmalige id hinzu.
da es nach murphy unwarscheinlich ist, das auf einer posting-seite aus einem > 1 mio-spektrum
die gleiche id nochmal auftaucht, sollte es funktionieren.

das gleich problem hatte ich mit dem spoil_tag= bbcode
wenn du einige male auf den gleichnamigen button klickst, weißt du was ich meine:
http://sekuro.se.funpic.de/phpbb3/posti ... f=14&t=171

Re: Problem mit BBCode Countdown

Verfasst: 14.01.2009 21:17
von Dr.Death
@FuGu: Ich bezog mich auf das bereitgestellte JavaScript...und das sucht und ersetzt nur das zuerst gefundene Element.

Re: Problem mit BBCode Countdown

Verfasst: 14.01.2009 22:08
von FuGu
@ 4seven
Deinen Vorschlag werde ich sofort umsetzen, wenn du das Noob gerecht erklärst :o
Ich habe nämlich quasi gar keine Ahnung und stecke in php Kinderschuhen!