PHP Wert an Javascript übergeben und nutzen

Hallo liebe Gemeinde,

folgende Situation: Ich hatte vor einer weile jemandem einen Auftrag erteilt mir einen Live Countdown zu schreiben mit dem ich das Enddatum meiner Inhalte anzeigen kann und bekam dann ein Javascript und eine PHP zurück das auf Prototype zurückgreift. Das Ding ist nun das das ja alles hervorragend funktioniert, allerdings hört es auf zu funktionieren sobald man ein Verzeichnis tiefer in der Seite geht (in dem Fall das Verzeichnis /angebote/ welches durch .htaccess erzeugt wurde)

Der Grund dafür ist folgende Zeile im Javascript:
new Ajax.PeriodicalUpdater(a[i], „countdown.php“, { method:„POST“, frequency:1, parameters:„id=“+id });

Hier wird die countdown.php aufgerufen. Das Ding ist das es davon ausgeht das das Javascript aus dem Hauptverzeichnis meiner Seite ausgeführt wird. Wenn ich statt „countdown.php“ einsetze „…/countdown.php“ funktioniert es auch in meinen Unterordnern, aber nicht mehr auf der Hauptseite.

Initialisiert wird das ganze Script in der header.tpl durch
echo „“;

Ich habe außerdem einen PHP String $sitelink der den Pfad meiner Seite beinhaltet (http://www.seite.de/seite/)

Die Frage ist nun wie kann ich den PHP String $sitelink an das Javascript übergeben und vor „countdown.php“ setzen? Ich glaube nämlich dann gibt es keine Probleme mehr.

Von Javascript habe ich keine Ahnung, aber nach meinem PHP Verständnis müsste ich den String an das Javascript durch

echo „’);“>";

übergeben können. Jetzt ist nur noch die Frage wie ich es auslese?

Das ganze Javascript:

// Funktion initCountdown
this.initCountdown = function( ) {
// Alle DIV-Tags als Array auslesen
var a = document.getElementsByTagName(„div“);
// Variablen „b“ und „id“ als leeren String initialisieren
var b = id = „“;

// Array durchlaufen
for ( var i = 0; i

Hi,

ich bin mir nicht sicher, ob ich dein Problem richtig verstanden habe. Aber wenn dein PHP-Skript stets im Root-Verzeichnis deiner Seite liegt, warum rufst du es dann nicht so auf?
„/countdown.php“

Gruß
Netscape47Feind

Hallo.

Weil es nicht funktioniert. Wenn ich z.b. seite.de/index.php aufrufe, findet das Javascript natürlich die countdown.php, weil es im gleichen Verzeichnis (Rootverzeichnis) liegt und alles funktioniert dann. Wenn ich hingegen seite.de/ordner/ aufrufe, sucht es nach der Datei an der Stelle seite.de/ordner/countdown.php und da ist natürlich nichts.

Unter anderem für solche Sachen habe ich ja den String $sitelink wo mein absoluter Pfad drin ist und meine Frage war jetzt einfach, wie ich den String $sitelink an das im vorherigen Post kopierte Javascript übergebe und vor „countdown.php“ einsetzen kann, damit das Javascript durch den absoluten Pfad immer weiß wo die Datei liegt und funktionsfähig bleibt.

Vielleicht hilft das besser beim Verständnis des ganzen?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

schau dir mal diese beiden Seiten bzw. deren Quelltexte an:

http://www.webmonk.de/unterordner/genjin.html
http://www.webmonk.de/genjin.html

Sie rufen beide die Datei:
http://www.webmonk.de/countdown.php
auf. Es funktioniert mit dem Slash, was ist bei dir anders?

Gruß Netscape47Feind

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Seltsam. Also ich benutze eine header.tpl Datei (aber ohne Smarty Engine) die ich in alle meine Seiten include. Und wenn ich dein / einsetze bekomme ich nur zurück

Objekt nicht gefunden!

Der angeforderte URL konnte auf dem Server nicht gefunden werden. Der Link auf der verweisenden Seite scheint falsch oder nicht mehr aktuell zu sein. Bitte informieren Sie den Autor dieser Seite über den Fehler.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 404


Kleiner verkürzter Auszug der header.tpl:

= $title ?><?php if ($init_countdown) {
echo „“;
} else {
echo „“;
}
?>


Und wie ich ja mal meinte wenn ich schreibe „…/countdown.php“ funktioniert das Countdown Teil wenn man über seite.de/ordner/ reingeht, aber nicht mehr im Rootverzeichnis seite.de/index.php. Ist irgendwo auch logisch.

Kannst du mir nicht sagen wie ich meinen absoluten Pfad String nutzen kann?

echo „’);“>";

Damit sollte (vermute ich) die Übergabe des Strings an das JavaScript erfolgen. Was muss ich im JavaScript ändern um es jetzt einzusetzen?

Mh, eigentlich das Einfügen der header-Datei nicht das Problem sein.
Den Seitenpfad aus der Variable $sitelink an die JavaScript Funktion zu übergeben ist nicht wirklich sinnvoll, da die aufzurufende Datei ja im Seitenroot liegt. Den Pfad müsste man dann auch wieder rauskürzen o.ä.

Eine, nicht so schöne Möglichkeit wäre noch den Pfad daher absolut anzugeben:

new Ajax.PeriodicalUpdater(a[i], „http://www.seite.de/countdown.php“, { method:„POST“, frequency:1, parameters:„id=“+id });

Vielleicht stehen in der .htaccess aber auch Regeln drin, die dies und auch den vorherigen Versuch mit dem Slash ins leere laufen lassen.

Gruß
Netscape47Feind

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich benutze Nginx statt Apache, daher habe ich keine traditionelle .htaccess. Vielleicht liegt es ja daran das deine Ansätze nicht funktionieren.

Also den absoluten Pfad nochmal manuell in der Datei definieren wäre wirklich nicht schön, dass Ziel ist ja nur in der config.php den Pfad anzupassen und damit soll sich dann Seitenweit alles erledigt haben.

Im moment habe ich jetzt ersteinmal einen temporären Workaround, was mich daran allerdings stört ist das der ganze Javascript Code direkt im Quelltext über dem body lesbar auftaucht und das will ich eigentlich nicht. Ich weiß natürlich das wer sich auskennt auch sonst direkt die Javascript Datei vom Header auslesen und aufrufen könnte, aber ich würde das trotzdem lieber alles wie vorher eher ‚getrennt‘ halten.

Der Workaround ist eine PHP Datei in der der Javascript Code enthalten ist:

// der ganze code hier

Und die Datei include ich vor dem initialisieren der JS-Function also über dem Tag der es ausführt. In der PHP Datei habe ich dann bei der Problemzeile gesetzt:
new Ajax.PeriodicalUpdater(a[i], „= $sitelink ?>countdown.php“, { method:„POST“, frequency:1, parameters:„id=“+id });

Funktioniert jetzt überall, erscheint halt leider nur der gesamte JavaScript-Code direkt im Quelltext über dem tag…

Wenn es nicht anders geht muss es wohl so bleiben… schade das reines JavaScript wohl so eingeschränkt ist in dem Fall?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]