hotti: TemplateEngine und OutBuffer

hi,

Smarty macht mir einen Strich durch die Rechnung, wenn ich den Template-Prozess in die an ob_start() übergebene Callbackfunktion einbaue.

Fatal Error:
ob_start(): Cannot use output buffering in output buffering display handlers

in dem Moment, wenn return $sm->fetch('smarty_template.tpl'); aufgerufen wird.

Es ist noch nicht zu spät ob einer Entscheidung für eine andere TemplateEngine, welche käme da in Frage?

Hotti

  1. Tach!

    Smarty macht mir einen Strich durch die Rechnung, wenn ich den Template-Prozess in die an ob_start() übergebene Callbackfunktion einbaue.

    Vermutlich ist es nicht nötig, um Smarty noch eine Ausgabepufferung zu bauen. Es sollte sich so nutzen lassen, dass es alles gerendert zurückgibt, ohne es selbst auszugeben.

    Warum brauchst du überhaupt noch eine extra Ausgabepufferung, wenn deine Ausgabe von einer Template-Enging erzeugt wird? Die Antwort wäre lediglich, dass du nicht konsequent beim Nutzen der Template-Engine bist oder mehrmals Templates ausführen lässt, deren Ausgaben dann aber nicht sammelst sondern auswirfst, um sie wieder mit Ausgabepufferung aufzufangen.

    Es ist noch nicht zu spät ob einer Entscheidung für eine andere TemplateEngine, welche käme da in Frage?

    Eine die deine uns unbekannten Anforderungen erfüllt. Wie wäre es mit PHP?

    dedlfix.

    1. Hallo lieber dedlfix,

      Smarty macht mir einen Strich durch die Rechnung, wenn ich den Template-Prozess in die an ob_start() übergebene Callbackfunktion einbaue.

      Vermutlich ist es nicht nötig,

      ;)

      Wenn ich was vermute, dann prüfe ich das. Eine Vermutung, deren Prüfung jedoch viel Zeit frisst, ist meine Suche nach einer TemplateEngine, die meinen Anforderungen entspricht. Btw., Smarty ist mittlerweile aus anderen Gründen ausgeschieden.

      Es gibt durchaus Gründe dafür, Template und Klasse in einer Datei unterzubringen, z.B. für ein Login-Formular, die Klasse selbst wird ohnehin aus dem Dateisystem geladen ;)

      Das Problem in der zu ob_start() gehörigen Callbackfunktion betrifft übrigens nicht nur Smarty oder andere Sourcen, die selbst in den OB eingreifen, es betrifft unglücklicherweise auch die Built-In-Funktion print_r() die gerade beim Entwickeln sehr nützlich ist, zumindest tritt das auf meiner Kiste auf:

      PHP Fatal error:
      print_r(): Cannot use output buffering in output buffering display handlers

      Wer Lust und Laune hat, kann das mal selbst testen, hier ist der Code:

        
      <?php  
      ob_start('response');  
      function response($buffer){  
      	$a = array(1,2,3);  
      	return print_r($a,1);  
      }  
      ?>  
      
      

      Hotti