Hallo,
ich habe eine riesen große Frage, die auch der Grund war weshalb ich mich hier angemeldet habe. Ich wusste nicht so ganz wo ich das posten soll, tut mir leid wenn es falsch ist.
Ich habe für mein Board die Forensoftware vBulletin 4.0.6. Dafür gibt es ein Add-On was einen Countdown zu dem nächsten Event erstellt. Dies habe ich auch als Widget auf der Startseite. Das wird dann mit einem Script was auf den Server drauf geladen wurde gesteuert und einem PHP Code dieser lautet:
ZitatAlles anzeigenob_start();
global $db,$vbulletin;
$event_calendarid="1";
$no_events_message="<div style='width: 100%; text-align: center; font-weight: bold'>There are no events.</div>";
$today_date = mktime(0, 0, 0, date(date("m")), date(date("d")), date(date("y")));
$and=" and dateline_from > '".$today_date."'";$getevents=$db->query_read("SELECT eventid, title, dateline_from from " . TABLE_PREFIX . "event WHERE calendarid='".$event_calendarid."' $and order by dateline_from ASC LIMIT 2");
$count=1;
if(!$db->num_rows($getevents))
{
echo $no_events_message;
}
else
{
echo "<script type='text/javascript'>\n";
WHILE ($events=$db->fetch_array($getevents))
{
$event_title=$events['title'];
$event_date = vbdate('U',$events['dateline_from'], false,true,false,true)-vbdate('U');
if($count==1)
{
echo "var CountDownTimer=new CountDown('CountDownToChange',1,'".$event_title."<br />','".$event_date."','ywdhms',1)\n";
}
else
{
echo "CountDownTimer.AddNewEvent('".$event_title."<br />','".$event_date."','ywdhms',".$count.")\n";
}
$count++;
}
}
echo "CountDownTimer.DisplayTime(FormatResults)\n";
echo "</script>\n";
$db->free_result($getevents);
unset($events);
$output=ob_get_contents();
ob_end_clean();
Ich habe zB ein Termin für nächste woche Mittwoch eingesetzt und das wird folgender Maßen angezeigt als Textformat:
6 days, 3 hours, 33 minutes and 44 seconds.
Kann ich dies auch auf Deutsch umstellen?
Ich habe außerdem bei einem anderen Board gesehen, das dies dann auch in einem Bild (Flash format) eingefügt werden kann. Damit sich also dann diese Zeiger bewegen.. In einem kleinem Bild.. Genau das selbe konzept. Ich habe überall gesucht und nichts gefunden, fast auch überall gefragt und niemand konnte mir eine Antwort geben. Mit welchem Programm kann ich solch ein Flash Countdown Bild erstellen ?
Und wie ? Ein tutorial wäre super, mit php kenne ich mich so gut wie gar nicht aus. Deswegen habe ich mich ja hier angemeldet hehe..
Dann hab ich noch eine letzte Frage:
Ich kann ja mehrere Widgets mit diesem Php countdown code erstellen, nun würden die aber immer nur auf das nächste event (ich nenne es mal "Event Alpha") gehen. Und zwar alle. Aber ich möchte gleichzeitig auch das ein Countdown besteht zu dem darauf folgenden Event (nennen wirs mal "Event Gamma"), wie geht das ?..
Die Datei auf dem Server ist ein Javascript.. ich habe es mal geöffnet und hier vielleicht hilft es ja euch:
ZitatAlles anzeigenfunction CountDown(t,m,e,d,f,p) {
document.write('<div id="'+t+'" style="width: 100%; font-weight: bold; text-align: center"> </div>')
if ((!document.getElementById)||(!document.getElementById(t))) {return}
this.Running=false
this.TotalEvents=0
this.MaxEvents=0
if (m!=null) {this.MaxEvents=m}
this.TextLocation=document.getElementById(t)
this.EventName=new Array()
this.Position=new Array()
this.TimeToGo=new Array()
this.YearsToGo=new Array()
this.WeeksToGo=new Array()
this.DaysToGo=new Array()
this.HoursToGo=new Array()
this.MinutesToGo=new Array()
this.SecondsToGo=new Array()
this.DisplayAs=new Array()
if (e!=null) {this.AddNewEvent(e,d,f,p)}
}
CountDown.prototype.AddNewEvent=function(e,d,f,p) {
this.EventName[this.TotalEvents]=e
var dt=d.split(' ')
if (dt.length==1) {this.TimeToGo[this.TotalEvents]=dt[0]}
else {this.TimeToGo[this.TotalEvents]=this.SetDateTime(dt[0],dt[1])}
this.YearsToGo[this.TotalEvents]=0
this.WeeksToGo[this.TotalEvents]=0
this.DaysToGo[this.TotalEvents]=0
this.HoursToGo[this.TotalEvents]=0
this.MinutesToGo[this.TotalEvents]=0
this.SecondsToGo[this.TotalEvents]=0
if (f!=null) {this.DisplayAs[this.TotalEvents]=f}
else {this.DisplayAs[this.TotalEvents]='ywdhms'}
if (p!=null) {this.Position[this.TotalEvents]=p}
else {this.Position[this.TotalEvents]=0}
this.TotalEvents++
this.SortEvents()
this.Running=true
}
CountDown.prototype.SortEvents=function() {
if (this.TotalEvents<1) {return}
var n,t,p
for (i=0;i<this.TotalEvents-1;i++) {
for (x=i+1;x<this.TotalEvents;x++) {
if ((this.Position[x]-this.Position[i])<0) {
n=this.EventName[x]
t=this.TimeToGo[x]
p=this.Position[x]
this.EventName[x]=this.EventName[i]
this.TimeToGo[x]=this.TimeToGo[i]
this.Position[x]=this.Position[i]
this.EventName[i]=n
this.TimeToGo[i]=t
this.Position[i]=p
}
}
}
}
CountDown.prototype.SetDateTime=function(d,t) {
var dt=d.split("/")
var tm=t.split(":")
var td=new Date()
var rt=new Date()
rt.setFullYear(dt[2],dt[1]-1,dt[0])
rt.setHours(tm[0],tm[1],tm[2],0)
return Math.round((rt.getTime()-td.getTime())/1000)
}
CountDown.prototype.FormatPeriod=function(v,n,i) {
if ((v==0)&&(this.DisplayAs[i].search(n.toUpperCase().substr(0,1))<0)) {return ''}
var z=''
if ((this.DisplayAs[i].search(/00/)>=0)&&(v<10)) {z='0'}
if (v==1) {return ', '+z+v+' '+n}
else {return ', '+z+v+' '+n+'s'}
}
CountDown.prototype.CalcPeriod=function() {
var t=0
var s=''
for (i=0;i<this.TotalEvents;i++) {
t=Math.abs(this.TimeToGo[i])
s=this.DisplayAs[i]
if (s.toLowerCase().search(/y/)>=0) {this.YearsToGo[i]=Math.floor(t/31536000)}
else {this.YearsToGo[i]=0}
t=t-(this.YearsToGo[i]*31536000)
if (s.toLowerCase().search(/w/)>=0) {this.WeeksToGo[i]=Math.floor(t/604800)}
else {this.WeeksToGo[i]=0}
t=t-(this.WeeksToGo[i]*604800)
if (s.toLowerCase().search(/d/)>=0) {this.DaysToGo[i]=Math.floor(t/86400)}
else {this.DaysToGo[i]=0}
t=t-(this.DaysToGo[i]*86400)
if (s.toLowerCase().search(/h/)>=0) {this.HoursToGo[i]=Math.floor(t/3600)}
else {this.HoursToGo[i]=0}
t=t-(this.HoursToGo[i]*3600)
if (s.toLowerCase().search(/m/)>=0) {this.MinutesToGo[i]=Math.floor(t/60)}
else {this.MinutesToGo[i]=0}
t=t-(this.MinutesToGo[i]*60)
if (s.toLowerCase().search(/s/)>=0) {this.SecondsToGo[i]=t}
else {this.SecondsToGo[i]=0}
}
}
CountDown.prototype.SubtractSecond=function(s) {
var flg=0
for (i=0;i<this.TotalEvents;i++) {
this.TimeToGo[i]=this.TimeToGo[i]-s
if (this.TimeToGo[i]<0) {flg++}
}
if (flg==this.TotalEvents) {this.Running=false}
}
CountDown.prototype.ShowResults=function() {
var thisobj=this
if (this.Running) {
setTimeout(function(){thisobj.ShowResults()}, 1000)
this.CalcPeriod()
var cd=''
var x=0
var ev=''
var mx=0
for (i=0;i<this.TotalEvents;i++) {
if (this.TimeToGo[i]>=0) {
cd=this.FormatPeriod(this.YearsToGo[i],'year',i)+this.FormatPeriod(this.WeeksToGo[i],'week',i)+this.FormatPeriod(this.DaysToGo[i],'day',i)+this.FormatPeriod(this.HoursToGo[i],'hour',i)+this.FormatPeriod(this.MinutesToGo[i],'minute',i)+this.FormatPeriod(this.SecondsToGo[i],'second',i)
if (cd=='') {cd=' Now!'}
else {cd=cd+'.'}
cd=cd.substr(2)
x=cd.lastIndexOf(",")
if (x>0) {cd=cd.substr(0,x)+' and'+cd.substr(x+1)}
if (ev!='') {ev+='<br>'}
ev+=this.EventName[i]+' '+cd
mx++
}
if (mx==this.MaxEvents) {break}
}
this.SubtractSecond(1)
}
else {
ev='No Countdown Event'
}
this.TextLocation.innerHTML=this.formatresults(ev)
}
CountDown.prototype.Padding=function(v) {
if (v<10) {return '0'+v}
return v
}
CountDown.prototype.DisplayTime=function(functionref) {
this.formatresults=functionref
this.ShowResults()
}
function ReturnArray(a,s) {
return a.split(s)
}
function FormatResults() {
var d=arguments[0]
return d
}
Ich wäre euch unendlich dankbar, ich bin schon am Verzweifeln!
Danke schonmal im Vorraus
Gruß DoneHG