Roger: php datei als template einlesen

moin!

ich habe eine phpdatei, die html-quellcode erzeugt. dieser quellcode soll als template herhalten. inhalt (vereinfacht):

  
<p>hallo {platzhalter}</p>  
<?  
echo "hallo duda";  
?>  

rufe ich die datei über den browser auf, wird nat. "hallo {platzhalter} hallo duda" ausgegeben. da die datei nun als template herhalten soll, versuche ich sie nun mittels file() einzulesen und zu verarbeiten. allerdings werden die php-tags nicht interpretiert und nur ausgegeben (php-parser wird umgangen?) - "hallo duda" fehlt.

wie bekomme ich denn die komplette html-ausgabe in eine variable um sie weiter zu verarbeiten?

gruß.
roger.

--
meine freundin sagt, ich wäre neugierig.
so steht's zumindest in ihrem tagebuch.
  1. Hallo Roger.

    ich habe eine phpdatei, die html-quellcode erzeugt. dieser quellcode soll als template herhalten. inhalt (vereinfacht):

    <p>hallo {platzhalter}</p>
    <?
    echo "hallo duda";
    ?>

    
    >   
    > rufe ich die datei über den browser auf, wird nat. "hallo {platzhalter} hallo duda" ausgegeben. da die datei nun als template herhalten soll, versuche ich sie nun mittels file() einzulesen und zu verarbeiten. allerdings werden die php-tags nicht interpretiert und nur ausgegeben (php-parser wird umgangen?) - "hallo duda" fehlt.  
      
    Natürlich. Ein Template ist auch nicht dafür gedacht, Programmcode auszuführen. Es wird eingelesen, die entsprechenden Ersetzungen vorgenommen und am Ende alles zusammen ausgegeben.  
      
    
    > wie bekomme ich denn die komplette html-ausgabe in eine variable um sie weiter zu verarbeiten?  
      
    Wenn es um das Einlesen des Templates geht, kannst du dies mit [file_get_contents](http://de2.php.net/manual/de/function.file-get-contents.php) erledigen.  
      
    Ansonsten kannst du auch die [Ausgabepufferung aktivieren](http://de2.php.net/manual/de/function.ob-start.php), wobei du den Puffer vor der Ausgabe beliebig manipulieren kannst.  
      
      
    Einen schönen Sonntag noch.  
      
    Gruß, Mathias  
    
    -- 
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|  
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“  
    [[HTML Design Constraints: Logical Markup](http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/HTMLConstraints.html)]
    
    1. moin!

      danke für die antwort.
      file_get_contents() macht aber nichts anderes wie file(), nur dass es gleich einen string ausgibt. der enthaltene php-code wird leider ebenso wenig geparsed, wie bei file().

      an ob_flush hab ich gar nicht gedacht! super tip! danke.

        
      <?PHP  
      $datei = "test2.php";  
      ob_start();  
      include($datei);  
      $inhalt.= ob_get_contents();  
      ob_end_clean();  
      ?>  
      
      

      $inhalt enthält dann meinen gesuchten quellcode und ich bin glücklich.

      gruß.
      roger.

      --
      meine freundin sagt, ich wäre neugierig.
      so steht's zumindest in ihrem tagebuch.
      1. Hi Roger,

        <?PHP
        $datei = "test2.php";
        ob_start();
        include($datei);
        $inhalt.= ob_get_contents();
        ob_end_clean();
        ?>

          
        Das ist mehr als grausam!! Du hast das Grundprinzip von Templates noch nicht verstanden - man verwendet Templates, um die Ausgabe (den HTML-Code) vom Programm (dem PHP-Code) zu TRENNEN, was du da machst ist ein wilder Mix, stattdessen du auch gleich auf Templates verzichten könntest.  
          
          
        Beispiel 1:  
          
        <p>{$foo}</p>  
        <?php echo "Hallo Welt"; ?>  
          
        Verwende stattdessen:  
          
        <p>{$foo}</p>  
        Hallo Welt  
          
          
        Beispiel 2:  
          
        <p>{$foo}</p>  
        <?php if($foo == $bar) echo $entweder; else echo $oder; ?>  
          
        Verwende stattdessen:  
          
        <p>{$foo}</p>  
        {if $foo == $bar}{$etweder}{else}{$oder}{/if}  
          
          
        Beispiel 3:  
          
        <p>{$foo}</p>  
        <?php  
          foreach($foo as $bar) {  
            echo $bar . " ";  
          }  
        ?>  
          
        Verwende stattdessen:  
          
        <p>{$foo}</p>  
        {foreach from=$foo item="bar"}{$bar} {/foreach}  
          
          
        Ich könnte das jetzt hier noch beliebig fortführen - und du würdest sehen, dass ein PHP-Code im Template wirklich vollkommen überflüssig ist, das einzige was zu brauchst ist eine Template-Engine, die so Sachen wie {if} und {foreach} auch interpretieren kann.  
          
        Eine Template-Engine, die das alles und noch viel mehr kann, und welche ich dir auch (da ich sie selber nutze) sehr empfehlen kann ist [Smarty](http://smarty.php.net/).  
          
          
        MfG, Dennis.
        
        -- 
        Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)  
        [Patch zur Verwendung von PATHINFO in JLog](http://www.gymnasium-odenthal.de/~dennis/jlog/PATHINFO-Fix-1.0.1/)  
          
        Man sollte nie aufhören zu fragen. (Albert Einstein)
        
        1. moin!

          danke für die hinweise. smarty ist mir bekannt und ich nutze es auch gern.
          hier geht es aber um eine anpassung eines kleinen forums (fertiges script) an ein bestehendes system. ich habe keine lust alles umzuschreiben, nur um alles nach code & html getrennt zu haben. dafür ist das budget zu klein. (umsonst sitz ich da nicht am sonntag dran :(
          das forum nutzt eine html-datei als template. diese passe ich an, indem ich zb. die navi aus der hauptseite include. somit vermeide ich redundanz, sollten sich zb. links ändern.

          gruß.
          roger.

          --
          meine freundin sagt, ich wäre neugierig.
          so steht's zumindest in ihrem tagebuch.