Templateparser Problem

daniel_sun

Erfahrenes Mitglied
Hallo,

ich denke es ist ein wenig schwer zu erklären was mein Problem ist aber ich versuche es trotzdem einmal :D.

Ich habe ein Problem bezüglich meines Template-Parsers (der eigendlich ganz gut funktioniert). Hier ist erst einmal der Code:

PHP:
function gettemplate($File, $Inhalt){
    if(file_exists("tpl/".$File.".tpl")){
      $a=file("tpl/".$File.".tpl");
      if ($Inhalt<>""){
        foreach($Inhalt as $d=>$e){
          foreach ($a as $b=>$c){
            $c=str_replace($d, $e, $c);
            $a[$b]=$c;
          }
        }
      }
      $a=implode(" ", $a);
      return $a;
    }else echo "Template (".$File.".tpl".") existiert nicht";
  }

Mit diesem Befehl fülle ich den Platzhalter mit irgendeinem Text.

PHP:
  $Content['$newstext'] = "TEXT";

Am Ende rufe ich das das Template mit diesem Befehl auf:

PHP:
  echo gettemplate("tpl_news",$Content);

Wie schon zu Anfang gesagt, das Script funktioniert im Grunde super, es gibt nur ein Problem:

Wenn ich z.B. ein Template habe, in dem eine Tabelle angezeigt werden soll die mit einer unbekannten Anzahl von Werten aus einer Datenbank gefüllt wird.
Dann muss ich mein Template in kleine "Teil-Templates" aufteilen. Z.B ein Template in dem der Code bis zur Tabelle steht. Dann der Code der Tabelle (der dann mehrmals aufgerufen wird z.b mit while($row = mysql_fetch_array($result)) und dann der Code bis zum Ende der Seite.
Wenn ich also eine Seite anzeigen will brauche ist also manchmal bis zu 5 Templates. Der Besucher der Page bekommt davon natürlich nichts mit aber ich finde es iwie "unsauber" und macht mir das Bearbeiten der Templates (das suchen ect) schwer.
Nun zu meiner eigentlichen Frage:
Sehr ihr einen weg wie ich mit dem bestehenden Parser die Situation besser lösen kann? Das ich die Menge der Templates pro seite vll auf 2 oder so herunter schrauben kann? z.B das Tabellentemplate (erst füllen lassen) und das dann in das eigendlich Template einfügen?

Ich selbst hab keine Lösung gefunden. Hoffentlich versteht ihr was ich meine und könnt mir helfen!

Danke in vorraus!

mfg
daniel_sun
 
Ich würde diesen "Templateparser" einfach ganz weglassen.
Nimmst du zum Parsen stattdessen PHP kommst du in den meisten Fällen mit nur einer Template-Datei aus.

Mir reicht dabei eine Datei für zum Beispiel eine verschachtelte Tabelle:

HTML:
<table>
    <tr>
        <td><strong>Es gibt <?php echo $_num; ?> Datenstaetze:</strong></td>
    </tr>
    <tr>

    <?php foreach( $new_data AS $key => $value ): ?>

        <td valign="top">
            <table width="300" border="1">

                <?php foreach( $new_data[$key] AS $zeile ): ?>

                <tr>
                    <td><?php echo $zeile['id']; ?></td>
                    <td><a href="?id=<?php echo $zeile['id']; ?>"><?php echo $zeile['name']; ?></a></td>
                </tr>

                <?php endforeach; ?>

            </table>
        </td>

    <?php endforeach; ?>

    </tr>
</table>
 
Das schwierigste ist nicht etwa das Template selbst, sondern das Aufbereiten der Daten im PHP Teil. Ich hatte dazu vor einiger Zeit einen PHP-Codeschnipsel geschrieben.

Schau dir das Tutorial von Dirk Jesse zu diesem Thema an, das ist schön erklärt dort. Die Beispiele dort sind für deine Zwecke besser geeignet, meine ich.
 
Genauer gesagt beschreibt der Artikel, wozu PHP ursprünglich entwickelt wurde: als "Template Engine für HTML" ;)

Wenn man tiefergehende Kenntnisse in OOP hat, lohnt es sich auch einen Blick ins Zend Framework zu werfen, welches mittels MVC (Model View Controller) Konzept noch eine etwas stricktere Vorgabe liefert zur Trennung von Daten laden (Model), Business-Logik und Datenaufbereitung (Controller) und der Darstellung (View). Das finde ich sehr praktisch und ist auch im allgemeinen recht leicht zu lernen :) Andererseits kann man sich natürlich auch ein eigenes MVC Gerüst programmieren und sich ein wenig inspirieren lassen. Ich selbst greife aber lieber auf vorhandenes zurück.
 
Mensch das ist doch genau das was ich gesucht habe :D. Vielen dank. Eine kurze frage. Was bedeutet nocht mal das as $value bei foreach.
 
Zurück