Rolf B: Platzhalter einsetzen

Beitrag lesen

Hallo einsiedler,

nicht, dass ich wirklich verstehen würde, was Du willst, aber ich rate mal, dass deine logout.php letztlich die login-Seite anzeigen soll, mit dem Hinweis drin "Sie haben sie erfolgreich ausgeloggt!".

Allerdings verstehe ich dies hier nicht:

const LAYOUT_HTML_FILE_PATH = './login.php'; $_LayoutHtml = file_get_contents( LAYOUT_HTML_FILE_PATH );

Wenn login.php eine PHP Datei ist, wird das PHP nicht ausgeführt. Die Datei wird 1:1 eingelesen und PHP-Anweisungen bleiben stehen. Sowas ist extrem verwirrend.

Du solltest einen von zwei Wegen gehen:

  1. der PHP Weg:

Wenn Du die Datei unbedingt login.php nennen willst, dann hol sie mit require oder include herein. PHP-Code darin wird dann ausgeführt, d.h. du kannst zwar immer noch sowas wie {meldung} erzeugen, musst aber nicht. Du kannst auch vor dem include eine Variable $meldung bestücken und im login.php <?= $meldung ?> schreiben. PHP löst die Variable dann auf.

Output-buffering: Wenn Du die login.php an der Stelle X einlesen willst, aber erst später an der Stelle Y ausgeben kannst, dann kannst Du die Ausgabe, die login.php erzeugt, puffern. Dafür gibt es ob_start() (output buffering start), das rufst Du vorher auf, und $loginPart = ob_get_clean(); zum Auslesen und Löschen des Puffers. Ein echo $loginPart kannst Du dann nach Lust und Laune ausführen. Und du kannst in $loginPart auch Ersetzungen durchführen, wenn Du noch {blah} Marker drin hast. Wie das geht, erkläre ich gleich.

  1. Templating:

Wenn Du die login-Vorlage mit file_get_contents einlesen willst, dann nenne sie login.tpl oder so, nicht .php. Damit ist klar, dass darin kein PHP Code ausgeführt wird.

Das Ersetzen von Template-Symbolen geht in einfacher Form mit

$template = file_get_contents(...);
$template = str_replace("{meldung}", $meldung, $template);

Wenn Du mehrere Symbole ersetzen willst, kannst Du die Array-Variante von str_replace verwenden:

$template = str_replace(
   [ "{meldung}", "{warnung}", "{titel}" ],
   [$meldung, $warnung, $titel ],
   $template);

Weiß nicht ob Du's weißt: [1,2,3] ist die Abkürzung für ARRAY(1,2,3).

Rolf

--
sumpsi - posui - clusi