kEv*: Struktur und Dynamik

Begrüßung ('Hallo'),

ich stehe vor einen, für mich möglicherweise größerem Problem.
Die Struktur meines Webprojektes ist scheinbar nicht so gut durchdacht wie ich Anfangs angenommen hatte.

Mein Ziel ist es:
templates zu verwenden, welche includiert werden (modularer Aufbau)
  ... Login Formular
  ... Registrierung
  ... Fehler
  ... Adminoberfläche
  usw.
  das sind alles kleinere Module, als html Dateien gespeichert.
Diese html Templates besitzen nur den Inhalt, also keine Header.

Zusätzlich gibt es zu jedem modul eine php Datei.
  ... login.php
  ... register.php
  ... admin.php
  usw.
  in diesen werden die html Dateien includiert.

Z.B. so:

register.php

include ('header.html');
  include ('register.html');
  include ('footer.html');

Statischer Inhalt ist kein Problem. Jetzt möchte ich aber den eigentlichen dyn. Anteil nur in den php Dateien schreiben und dann in den templates nur die Variablen eintragen.
Bei einzelen Variablen ist das ja auch kein Problem, aber bei einer Schleife war und bin ich aufgeschmissen.

Etwa in der Art hat mich dieses Problem zum nachdenken angeregt.
  ... php

$sql = mysql_query ("SELECT ....
  while ($res = mysql_fetch_object ($sql)){
    ... die ausgabe
  }
  eval ("$error = "".gettemplate("error")."";");
  echo $error;

Wie bekomme ich nun dieses while Ergebniss in das Template? Die Ausgabe war ein select bzw. vielmehr die options. ca 30 Stück. Ich müßte das Ergebnis der while Schleife irgendwie in das template bekommen. (vielmehr vielleicht ein Array, k.A.)

Ich hoffe jemand hat mich verstanden.
Mir fällt es selbst schwer, das Problem zu beschreiben.

AufWiedersehen ('Vielen Dank'),
LG
--
kEv*
----

--
kevin
Kevin
geboren am: o8.o7.2oo6
Gewicht: 3660g
---
SELFCODE:
---
sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
---
  1. Hallo,

    ich stehe vor einen, für mich möglicherweise größerem Problem.
    Die Struktur meines Webprojektes ist scheinbar nicht so gut durchdacht wie ich Anfangs angenommen hatte.

    Das kommt bei Softwareprojekten hin und wieder vor ;-)

    Mein Ziel ist es:
    templates zu verwenden,

    Guter Vorsatz.

    Zusätzlich gibt es zu jedem modul eine php Datei.
      ... login.php
      ... register.php
      ... admin.php
      usw.
      in diesen werden die html Dateien includiert.

    Z.B. so:

    register.php

    include ('header.html');
      include ('register.html');
      include ('footer.html');

    Statischer Inhalt ist kein Problem. Jetzt möchte ich aber den eigentlichen dyn. Anteil nur in den php Dateien schreiben und dann in den templates nur die Variablen eintragen.

    Kann ich mir vorstellen.

    Entweder verwendest du in deinen Templates PHP-Code, der Variablen ausliest.

    Ein andere Möglichkeit, die ich dir ans Herz legen möchte: Erfinde das Rad nicht neu, sondern nutze eine fertige Template-Engine. Das erfordert zwar ein wenig Einarbeitungszeit, nachher kannst du dich aber besser auf dein Projekt konzentrieren und mußt dich nicht mit der Programmierung der Template-Engine herumschlagen.

    Ich habe gute Erfahrungen mit Smarty gemacht. Mehr Infos inkl. ausführlicher Doku hier: http://smarty.php.net

    Gruß

    Stareagle

  2. echo $begrüßung;

    Wie bekomme ich nun dieses while Ergebniss in das Template? [...] vielleicht ein Array, k.A.)

    Ein Array mit den abgefragten Werten anlegen und dieses dem Template zwecks Darstellung (foreach $array as $element ...) zu übergeben ist eine recht einfache Möglichkeit, wenn du Datenermittlung und -ausgabe getrennt haben möchtest. Das bedeutet aber auch, dass zuerst das Array angelegt werden muss, es Speicher verbraucht, und es dann durchlaufen werden muss, um an die Werte zu kommen.

    Mit etwas OOP könnte man das Problem mit einem Datenabfrageobjekt lösen. Das wäre ein Objekt, das anders als eine reine Datenbankabstraktionsschicht (DBA), etwas mehr über die Daten-/Tabellenstruktur wissen darf. In der Tat kann sich dieses Datenobjekt beim Datenbank-Handling auch einer DBA bedienen. Es liegt also zwischen Datenbank bzw. Datenbankabstraktion und den Teilen die den allgemeinen Programmablauf (1) und die Ausgabe (2) kontrollieren.
    Das Datenobjekt wird in (1) initialisiert, bekommt die Parameter übergeben, die es benötigt, um die Abfrageanweisung (im Falle einer Datenbank sicherlich SELECT) zu generieren. Diese Abfrage kann sogar schon ausgeführt werden, und vermutlich benötigt (1) schon einige Ergebnisse (z.B. Anzahl der Datensätze) um weitere Dinge zu steuern. Nur das eigentlich Fetchen der Datensätze erfolgt vorläufig nicht. Wenn (1) soweit fertig ist, gibt es an (2) ab und übergibt neben den anderen berechneten Werten für das Template auch das Datenobjekt. (2) weiß, dass dieses Datenobjekt eine Methode zum Abfragen der Daten hat und ruft nun solange diese Methode auf wie Datensätze vorhanden sind. Diese Methode holt ihrerseits die Daten mittels Fetchfunktion aus der vorher bereits ermittelten Ergebnismenge ab.

    Somit trennst du nicht nur Datenausgabe von Datenerzeugung sondern hast nun drei Teile: kontrollierende Logik, Datenbehandlung, Ausgabe. Man nennt dieses Programmiermuster auch MVC - Model-View-Controller. Die Models kümmern sich nicht nur um die Datenbankabfragen, vielmehr sind sie für die gesamte Geschäftslogik zuständig. Alle Arten von Berechnungen, die das eigentliche Thema betreffen, das mit dem Programm erledigt werden soll, machen die einzelnen Models. Der Controller sorgt für den allgemeinen Datenfluss. Er nimmt Daten entgegen, verteilt sie an die Models und die Views und weiß auch, wann welche von beiden aufzurufen sind. Und die Aufgabe der Views dürfte klar sein.

    echo "$verabschiedung $name";