Hallo Felix!
Du hast die Logik der Ausgabe mißverstanden.
Schreibe Dein Formular doch so:
<body>....
<!-- tpl:formular -->
...</body>
>
Die eigentliche Ausgabe findet durch die /tpl/tpl.php statt, nicht in der index.php. Die liefert nur den Inhalt an die /tpl/tpl.php.
> Sollte eine Seite kein Formular benötigen, kannst Du entweder den HTML-Kommentar belassen (er bewirkt im Browser ja nichts), oder Du kannst ihn vor der Ausgabe entfernen, da Dein Script ihn in jedem Falle ersetzt, falls nicht benötigt eben mit einem Leerstring... Das könnte dann so aussehen:
>
> ~~~php
<?php
>
> $seite = file_get_contents('/tpl/index.tpl');
>
> include '/tpl/tpl.php'; // was passiert hier eigentlich???
>
> $formular = ''; // leer für "nicht benötigt"
> // jetzt kannst Du im Bedarfsfalle Dein Formular erstellen und den HTML-Code in $formular ablegen.
>
> // Formular-Kommentar löschen bzw. mit echtem HTML-Code ersetzen:
> $seite = str_replace ('<!-- tpl:formular -->', $formular, $seite);
>
> echo $seite; // kompletten HTML-Code an Browser schicken
>
> // Script-Ende
> ?>
$seite = file_get_contents('/tpl/index.tpl'); steht in der index.php.
Das echo $seite steht in der /tpl/tpl.php.
Das sind also zwei unterschiedliche Dateien. Die /tpl/index.tpl hat nur den Zweck, Logik und Layout möglichst zu trennen. Die eigentliche Schablone ist die /tpl/tpl.php. Dazwischen steht als Bindeglied die index.php, in der seitenspezifischer Code ausgeführt wird.