Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
11.02.2006, 15:17
Tubgirl



Also, ich habe hier ein Templatesystem, das ich umbauen soll.Man füttert es mit solchen Sachen:

Quellcode:<table border="1">
  <tr>
    <td colspan="3"><h1>{var}title{/var}</h1></td>
  </tr>
  <tr>
    <td>{file}left.php{/file}</td>
    <td>{file}main.php{/file}</td>
    <td>{file}right.php{/file}</td>
  </tr>
  <tr>
    <td colspan="3">{var}foot{/var}</td>
  </tr>
</table>
Das dürfte soweit selbsterklärend sein.

Realisiert wird das ganze über eine Klasse: http://nopaste.php-q.net/191088

Der Aufruf davon sieht wie folgt aus:
PHP-Quellcode:<?php

  
include("inc/template.class.php");
  include(
"inc/header.inc.php");
  
$tpl =& new template;

  
$tpl->set_dir('templates/default/');

  
$tpl->load('index.html');
  
$tpl->assign_var('title''Headvariable');
  
$tpl->assign_var('foot''Footvariable');
  
$tpl->out();
  
?>
Das funktioniert auch alles soweit mit einer kleinen Einschränkung. Als ich das Ding in die Hände bekommen habe, konnte das mit {file}{/file} keine php-Inhalte einabauen. Das musste aber gehen, und zwar für html, php und Mischkonstruktionen gleichermaßen.

Also habe ich bei php.net vorbeigeschaut und mich gründlich über eval() schlau gemacht. Mit der Funktion include_file() in der Template-Klasse funktioniert das jetzt - allerdings landet der Output nicht da wo er soll (In den Tabellenzellen) sondern am Anfang, offenbar vor $tpl->out();. Das Ganze sieht dann so aus: http://www.planet-pepe.net/pronblog/

Das ist das beste was ich in den letzten zwei Tagen mit steten Experimenten und fleißiger Googlei hinbekommen habe... und weil mir so langsam die Ideen ausgehen, frage ich mal hier: Wie bekomme ich das, was ich vorhabe am besten hin? Wie kriege ich meine Inhalte dahin, wo ich sie haben will?

--


Dieser Beitrag wurde am 11.02.2006 um 15:18 von -Sir_Pepe- bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
11.02.2006, 16:02
TheTinySteini



Ich bin mir grad nicht ganz sicher ob ich dein Problem richtig erfasst habe... aber ich glaube Output-Buffering ist das was du haben willst. ob_start() etc heissen die Funktionen iirc. Output-Buffering anschalten, andere PHP-Datei eval()en, Output-Buffer in String schreiben, im Template ersetzen, Output-Buffer leeren, freuen.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
002
12.02.2006, 13:53
Tubgirl



Nun, da ich jetzt mit dem Output-Buffering wesentlich näher am gewünschten Endergebnis dran bin als vorher, hast du das Problem offenbar sehr richtig erfasst. Ich habe die include_file() wie folgt umgebaut:

PHP-Quellcode:<?php
  
function include_file($code)
  {
    
$code=str_replace('<'.'?php','<'.'?',$code);
    
$code='?'.'>'.trim($code).'<'.'?';
    
ob_start();
    eval(
$code);
    return 
ob_get_clean();
  }
?>
Das Ergebnis sieht jetzt so aus: http://www.planet-pepe.net/pronblog/

Hat jetzt offenbar Probleme die reine php-Datei zu verarbeiten, kommt aber mit HTML und mit Mischlingen gut klar. Ehm, hat irgendwer eine Idee wie präzise man dieses Fehler-Stückwerk zu lesen hat? :D

Eval bei php.net bietet da einige Optionen an, aber nichts von dem hat bisher Abhilfe geschaffen.

*edit*
Inhalt der bockigen Datei:
PHP-Quellcode:<?php
  
print '<h2>Links!</h2>
<p>
  Diese mit {file}{/file} eingebundene Datei besteht zu 100% aus php.
</p>'
;
?>
*edit2*

Ich habe es!
Das {file}{/file} hat das System verwirrt, denn da suchte es nach einer Datei, die's ja nicht finden konnte. Danke an TTT!

--


Dieser Beitrag wurde am 12.02.2006 um 14:55 von -Sir_Pepe- bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche