borisbaer: Von JS dynamisch erzeugter Inhalt kommt nicht an PHP-Variablen heran

Beitrag lesen

problematische Seite

Hallo Felix,

Für mich ist der Index 0 im obigen Beispiel oft unerwünscht, da er leer ist. In Deinem Anwendungsfall hier mag das anders sein, aber in solchen Fällen benutze ich dann preg_split:

print_r(preg_split('~/~', '/abc/def', -1, PREG_SPLIT_NO_EMPTY));
Array
(
    [0] => abc
    [1] => def
)

interessant! Ich werde mir das mit preg_split einmal genauer ansehen. Könntest du mir erklären, wo du das Problem bei explode siehst? Das konnte ich noch nicht nachvollziehen.

Wenn ich mich recht erinnere, sollte man für include-Anweisungen keine Pfade aufgrund von _SERVER[DOCUMENT_ROOT] verwenden. Keine Ahnung, wo ich vor Jahren gelesen hatte, warum das ein Sicherheitsproblem sein könnte. Jedenfalls verwende ich die magische Konstante __DIR__ für Dateipfade. Sie ist das Verzeichnis, in welchem die PHP-Datei liegt, in der die Konstante jeweils benutzt wird (daher magisch). Vielleicht willst Du das auch tun.

Okay, in manchen Fällen bietet sich das sicher an, aber wenn die Ordnerstruktur verschachtelter wird, dann wird es ohne einen Verweis vom ROOT-Ordner irgendwie schwierig, oder? Gerade wenn man viel mit php include strukturiert.

Aber: Warum includiert sich die Datei index.php selbst? Oder verstehe ich die include-Anweisung falsch und es handelt sich um eine andere index.php?

Ja, sorry, das ist missverständlich. Nein, sie inkludiert eine andere index.php, nämlich die zentrale im ROOT-Ordner. Diese enthält alle Bausteine der Seite. Die Variablen $page und $heading sind dafür da, dass sich der title und der h1-tag der jeweiligen Seite anpassen.

Dein JavaScript tut irgendwelche Dinge. Dabei kommt fetch() zum Einsatz. Warum Du das verwendest, erschließt sich mir nicht. Ich hätte beim Klick auf die Registerkarten ein anderes Verhalten erwartet, nämlich dass ich zu einem neuen Dokument gelange, welches der Browser komplett neu lädt. Dein JavaScript scheint aber diesen Vorgang empfindlich zu stören. Dabei passiert dann offensichtlich das von Dir beschriebene Verhalten.

Puh, eigentlich sollen die Inhalte der „Tabs“ dynamisch über fetch() geladen werden. Beim ersten Seitenaufruf jedoch statisch (damit man die jeweilige subpage bspw. auch bookmarken kann). Ich wollte verhindern, dass beim Tabwechsel ein Neuladen der ganzen Seite stattfindet.

und warum Du dazu ganze sieben (7!) JavaScript-Dateien lädst, das weißt Du sicherlich am besten.

Die sind ja erst mal nur der Übersichtlichkeit halber gesplittet. Am Ende kann man die alle in ein script.js packen.

Kann es sein, dass die Script-Datei in subpages beim Fetchen unter anderen Voraussetzungen geparst wird, weil Dein initiales PHP-Script dann fehlt? Wird sie etwa direkt als Hauptscript geladen, ohne von woanders zuerst inkludiert zu werden?

Der Teil der Seite, der diese Grafik enthält, wird über die PHP function beginContainer( $uri, $page ); eingefügt. Diese function enthält folgenden Code:

function beginContainer( $uri, $page ) { ?>

	<div class="container">

		<figure><img src="/games/<?= $uri[2]; ?>/images/logo.png" alt="<?= $page; ?>"></figure>

<?php }

Die subpage games.php wird beim ersten Aufruf statisch geladen über php include. Beim Tabwechsel über die Navigation wird die games.php dynamisch über js fetch() geladen. Die Variablen $uri und $page sind halt außerhalb game.php – sie sind in /demons-souls/index.php.

Ich dachte, sobald /demons-souls/index.php mal geladen ist, bleiben die dort definierten Variablen irgendwo im document stehen, d.h. man kann darauf jederzeit zugreifen. Wenn diese Variablen allerdings nur beim ersten Laden der Seite eingefügt werden und dann weg bzw. unzugänglich sind, dann müsste eigentlich bei jedem JavaScript-Tabwechsel auch das PHP script neu laden, aber genau das ist ja nicht der Fall, da die Seite nicht noch mal aufgebaut wird.

Hmm, wahrscheinlich ist das der Fehler. 😯