Seite 5 von 5

Verfasst: 01.11.2008 09:13
von TLoD
Ich glaube wir reden aktuell über das falsche JS.
Ich poste mal noch mal den ganzen Code.

Code: Alles auswählen

<html>
<head>
<?php

// Lese letzten Scan aus
                $sql = "SELECT Datum
                                FROM ".SCANLOGS."
                                ORDER BY Datum DESC;";
                $result = mysql_query($sql) OR die(mysql_error());
                $row = mysql_fetch_assoc($result);
                // nur den ersten (also letzten Eintrag) auslesen
                $date = $row['Datum'];
                $ZeitE = getNextScan($date);

$timestamp = ($ZeitE);

$testausgabe = date("F, j Y H:i:s",$timestamp);

?>
<script language="JavaScript">
var end = new Date("<?PHP echo $testausgabe; ?>");
function toSt2(n) {
  s = "";
  if (n < 10) s += "0";
  return (s + n).toString();
}
function toSt3(n) {
  s = "";
  if (n < 10) s += "00";
  else if (n < 100) s += "0";
  return (s + n).toString();
}
function countdown() {
  d = new Date();
  count = Math.floor(end.getTime() - d.getTime());
  if(count > 0) {
    miliseconds = toSt3(count%1000); count = Math.floor(count/1000);
    seconds = toSt2(count%60); count = Math.floor(count/60);
    minutes = toSt2(count%60); count = Math.floor(count/60);
    hours = toSt2(count%24); count = Math.floor(count/24);
    days = count;
    document.getElementById("c1").innerHTML = hours + ":" + minutes + ":" + seconds
    setTimeout("countdown()", 50);
  }
else
{
    document.getElementById("c1").style.color = "#00FF00";
    document.getElementById("c1").innerHTML = "00:00:00";
    document.getElementById("c1").innerHTML = "jetzt";
}
}
window.onload = function(){
  countdown();
}

</script>
</head>
</html>
Das ist der gesamte Code, für mein Counter JS.
Das Auslesen der DB habe ich mal vernachlässigt und den Timestamp gleich in die $timestamp gepackt.

Dann habe ich folgenden Code in die index.php gepackt.

Code: Alles auswählen

$timestamp = (1226098800);

$testausgabe = date("F, j Y H:i:s",$timestamp);
Und in die overall_header.tpl habe ich dann das komplette JS gepackt.

Code: Alles auswählen

<script language="JavaScript">
var end = new Date("<?PHP echo $testausgabe; ?>");
function toSt2(n) {
  s = "";
  if (n < 10) s += "0";
  return (s + n).toString();
}
function toSt3(n) {
  s = "";
  if (n < 10) s += "00";
  else if (n < 100) s += "0";
  return (s + n).toString();
}
function countdown() {
  d = new Date();
  count = Math.floor(end.getTime() - d.getTime());
  if(count > 0) {
    miliseconds = toSt3(count%1000); count = Math.floor(count/1000);
    seconds = toSt2(count%60); count = Math.floor(count/60);
    minutes = toSt2(count%60); count = Math.floor(count/60);
    hours = toSt2(count%24); count = Math.floor(count/24);
    days = count;
    document.getElementById("c1").innerHTML = hours + ":" + minutes + ":" + seconds
    setTimeout("countdown()", 50);
  }
else
{
    document.getElementById("c1").style.color = "#00FF00";
    document.getElementById("c1").innerHTML = "00:00:00";
    document.getElementById("c1").innerHTML = "jetzt";
}
}
window.onload = function(){
  countdown();
}

</script>
Mein Problem an der Sache ist nun, das der Counter nur dann funktioniert, wenn ich mich auf der index.php befinde, jedoch auf allen anderen Seiten nicht. Deswegen wollte ich nun den oberen Teil in die function.php packen, da er ja dann auf allen Seiten verfügbar ist.

Nun weiß ich aber nicht, wie ich das anstellen soll.

Als erstes hatte ich in dem JS die Zeile von:

Code: Alles auswählen

var end = new Date("<?PHP echo $testausgabe; ?>");
nach

Code: Alles auswählen

var end = new Date('{timestampcounter}');;
geändert und in der functions.php, dafür folgende Zeile eingefügt.

Code: Alles auswählen

$template->assign_vars(array('timestampcounter' => $testausgabe));


Denke soweit funzt das auch alles, nur wie bekomme ich nun in die

Code: Alles auswählen

{timestampcounter}
diese Informationen

Code: Alles auswählen

$timestamp = (1226098800);

$testausgabe = date("F, j Y H:i:s",$timestamp);
Denke wenn ich das Problem löse, dann sollte es funzen.
Ich werde heute mal noch die SQL Abfrage in die functions.php einbauen und dann als letztes die definition für {timestampcounter} evtl. habe ich ja so mehr Glück. Bitte jetzt nicht Steinigen ;)

Verfasst: 01.11.2008 09:38
von Miriam
Finde in der includes/functions.php

Code: Alles auswählen

	// The following assigns all _common_ variables that may be used at any point in a template.
davor füge ein:

Code: Alles auswählen

// Lese letzten Scan aus
                $sql = "SELECT Datum
                                FROM ".SCANLOGS."
                                ORDER BY Datum DESC;";
                $result = mysql_query($sql) OR die(mysql_error());
                $row = mysql_fetch_assoc($result);
                // nur den ersten (also letzten Eintrag) auslesen
                $date = $row['Datum'];
                $ZeitE = getNextScan($date);

$timestamp = (date("F, j Y H:i:s",$ZeitE);
danach füge ein:

Code: Alles auswählen

	$template->assign_vars(array(
		'TIMESTAMP_COUNTER'				=> date("F, j Y H:i:s",$timestamp),
Und so sollte

Code: Alles auswählen

{TIMESTAMP_COUNTER}
in allen Templates für Deine JS verfügbar sein.

Verfasst: 01.11.2008 11:30
von TLoD
Besten Dank! Ich werde es dann gleich mal testen.
Blöde Frage - aber wie wäre es ohne die SQL Abfrage gegangen?
Nur so aus Neugier ;)

Verfasst: 01.11.2008 13:24
von Miriam
Garnicht.

Aber Du hättest es in die config-Tabelle schreiben können und dann wäre es die Variable

Code: Alles auswählen

$config['datum'] 
gewesen. Und eine SQL Query weniger.