Frage zur Strukturierung/Aufbau von dynamischen Seiten

Soo mal eine grundsätzliche Frage an alle – weiß halt nicht ob ich hier im Forum richtig bin.

Ich arbeite mit PHP FastTemplate (kennen sicherlich einige) und bisher war es immer so das ich den Content in einer MySQL Datenbank abgelegt hatte.

Wenn jetzt ein bestimmter Content aufgerufen wurde, wurde der HTML code aus der Datenbank ausgelesen und über FastTemplate in die Vorlage geparst.

Bei reinen HTML Seiten ist das auch kein Problem aber sobald des dynamisch wird (Formulare, Bildergallerien, Suchfunktionen) musste ich bisher immer das ganze in einem iframe laufen lassen.

Find ich aber zum einen umständlich – vor allem wenn Variablen mit übergeben werden müssen – Beispielsweise bei einer Suchfunktion. Und zum anderen hat man dann immer das Problem bei dynamischen Inhalten das die Größe vom iframe nicht immer passt.

Bei so Seiten wie dem Forum hier, GMX oder im allgemeinen großen Portalen wird das ganze ja auch nicht über iframes gehandhabt. So kleine Denkanstösse, Tipps etc. sind gerne genommen.
 
Tja erstmal erstellst du doch deine Seite mit PHP
Somit kannst du bestimmtes includen.

Bei dynamischen Seiten wird das ganze aus einer Datenbank gelesen. Meist ist es so, dass verschiedene Templates - mit Platzhaltern gefüllt - dann includet werden und mit den entsprechenden Werten aus der Datenbank gefüllt werden.

Somit wird eine Datei nicht mit dem gesammten HTML gefüllt, sondern es bestehen vordrucke ...

PHP:
$test = "{ platzhalter1} { platzhalter12} { platzhalter3}";

Hier im Forum besteht zum Beispiel 1 Template für das POSTEN von Einträgen oder eines für das Anzeigen von den Einträgen -.-

Das ganze ist dann eine for-Schleife ...
Erst werden die Einträge gezählt, dann dieser Wert der Schleife übergeben und dann das Template sooft ausgegeben bis die Zahl erreicht wurde. Pro Template werden dann natürlich andere Werte eingefügt -.-

Hoffe das konnte dir etwas weiterhelfen.
 
Erstmal besten dank für die Antwort !

Joah die Idee mit dem includen lag mir auch am nähesten. Glaube bei FastTemplate geht das nur irgendwie nicht so recht.

habe in einer HTML Datei (dem Template) meinetwegen an einer X-beliebigen Stelle einen Platzhalter stehen. Von mir aus in einerm DivLayer oder einer Tabelle.
DIeser Platzhalter wird dabei so dargestellt

HTML:
{platzhalter}



wenn jetzt ein Script läuft welches die Struktur der Seite definiert, dann steht irgendwo folgende Zuweisung

PHP:
$tpl->assign("{platzhalter}",		"Wert des Platzhalters");


ein include Befehl lässt sich anstelle von "Wert des Platzhalters" nicht festlegen. Das ganze würde gehen wenn ich auf das Templategedöns verzichten und
im HTML Bereich irgendwo ein

HTML:
<html>
<?php include('neueSeite.php'); ?> 
</html>



einfügen würde.
Mit der Variante würde aber Code und Design wieder in einer Datei landen was ich vermeiden wollte da an den Seiten auch Leute arbeiten die von PHP
keinen Schimmer haben und sich dann hinterher wieder beschweren wenn Sie n Script zerschossen haben weil Sie nur ne Farbe ändern wollten
 
Sorry meinte mit "includen" nicht generell den inlcude befehl -.-
Hier mal ein Praxis bezogenes Beispiel ...
Muss dazu sagen, dass die Lösung mit einer TemplateKlase bestimmt sicherer wäre.

Hier mal was zu lesen ...
http://de3.php.net/eval

Datenbank --> Textfile
20070305|-|05.03.07|-|Praxis|-|Hallenbad - Altötting
20070319|-|19.03.07|-|Theorie|-|Hallenbad - Altötting
20070402|-|02.04.07|-|Praxis|-|Hallenbad - Altötting

Index.php
PHP:
<?php
//Funktion für die Templates -.- --> Daten in Template
function gettemplate($template,$endung="html") 
{ 
return str_replace("\"","\\\"",implode("",file($template.".".$endung))); 
} 
function dooutput($template) { 
echo $template; 
} 
//Daten aus Datenbankholen
$datei = "Termine/Training/files/training.txt"; 
if(file_exists($datei)) 
{ 
$termin = file($datei); 
$anzahl = count($termin);
//Daten sortieren
sort($termin); 
foreach ($termin as $key => $val) {
}
//Daten in array --> Platzhalter lesen
for($index = 0; $index < $anzahl; $index++) 
{ 
$eintrag = explode("|-|",$termin[$index]); 
$Zeile0 = $eintrag[0];
$Zeile1 = $eintrag[1];
$Zeile2 = $eintrag[2];
$Zeile3 = $eintrag[3];
//Daten im Template ausgeben mit eval
eval ("\$str .= \"".gettemplate("Termine/Training/templates/wiederholung")."\";"); 
} 
eval ("dooutput(\"".gettemplate("Termine/Training/templates/Layout")."\");"); 
} 
else 
{ 
echo"<center>Zurzeit findet kein Training statt</center>"; 
} 
?>

Layout.html ist jetzt die Seite mit dem Layout und die Wiederholungsdatei ...
Dein Layout kannste nun im der Layout.html festlegen wie du lustig bist. An der Stelle wo alles ausgegeben werden soll, fügst du einfach "$str" ein

wiederholung.htm
HTML:
<div align="center">
  <center>
  <table border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="#FFFFFF" width="82%" id="AutoNumber3">
    <tr>
      <td width="17%" align="center" bgcolor="#C0C0C0" bordercolor="#FFFFFF">
      <font color="#000080">
      $Zeile1</font></td>
      <td width="28%" align="center" bgcolor="#C0C0C0" bordercolor="#FFFFFF">
      <font color="#000080">$Zeile2</font></td>
      <td width="23%" align="center" bgcolor="#C0C0C0" bordercolor="#FFFFFF">
      <font color="#000080">
      $Zeile3</font></td>
    </tr>
    </table>
  </center>
</div>
Wie man sieht habe ich heir ein Template welche eine klare Form vorgibt ... dieses wird in meinem Fall immer untereinander aufgerufen -.- kann man für ein Forum ummoden ^^
Auf jedenfall kannste auch hier Design mit reinbringen und hast hier auch Platzhalte -.- bei mir nur mit $Zeile1 - $Zeile3 angedeutet ...
 
Zuletzt bearbeitet:
Ahoi ! Hat ein bisserl gedauert mit einer Rückmeldung. AAAaaaalso mit einer Textdatei (deinem Trainingsplan) scheint es ja zu funktionieren wie ich es grade ausprobiert habe. Aber mit PHP Dateien bzw. PHP Code nicht. Hab mal statt der Training.txt eine Training.php genommen in der eine einfache Schleife lief die einfach nur ne Zählvariable bis 10 zählt und ausgeben soll.

Bekomme dann So Fehlermeldungen wie

PHP:
Parse error: parse error, unexpected T_STRING in C:\apache\ \htdocs\test\template.php(45) : eval()'d code on line 1


Muss man bei der Verarbeitung mit PHP Dateien irgendwas besonderes berücksichtigen ?

Ich hab mal n Bild angehangen damit man sich mal n Überblick verschaffen kann.

Die 3 verschiedenfarbig dargestellten Kästchen sind alles div Layer. Im linken Teil stehen Termine und Infos. Wäre natürlich schön wenn man das auch Modular handhaben könnte, aber erst mal ist es so okay.

Im oberen Teil befindet sich das Menü sowie eine Suchfunktion.

Im rechten Teil ist der content. Das waren zumeist reine HTML Dateien. Diese konnte man ja auch prima auslesen aus der Datenbank und in den Platzhalter {content} einfügen.

Bisher war es so das wenn ein script aufgerufen wurde – eben diese Suche, dann habe ich in der Datenbank kein .html oder .php eingefügt sondern eben ein iframe. Das läuft ja auch, sieht aber a unschön aus im Quellcode und dann hat man immer das Problem mit den Scrollbalken denn wenn der Inhalt im iframe sich dynamisch verändert, verändert sich nicht die Größe.

Die Idee mit deinem includen ist natürlich die bessere und so würde ich das auch gerne handhaben allerdings scheint das ganze mit eval nicht zu funktionieren sobald ich statt reinem text oder html richtige schripte verwende.

Wenn ich ja mal wüsste nach was ich genau suchen muss, würde ich mich bei Google ja mal auf die Suche machen aber im Moment steh ich dahingehend ein wenig auf den Schlauch.
 

Anhänge

  • layout.png
    layout.png
    2,6 KB · Aufrufe: 24
So vielleicht gefällt dir ja das hier -.-

Layout.html
HTML:
<meta http-equiv="Content-Language" content="de">
<div id="Layer1" style="position:absolute; width:702; height:98; z-index:1; background-color: #99CCFF; border: 1px solid #000000; left:10; top:15">
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1" height="100%">
    <tr>
      <td width="50%">{SEARCH}</td>
      <td width="50%" valign="bottom">
      <p align="right">{NAVI}</td>
    </tr>
  </table>
</div>
<div id="Layer1" style="position:absolute; width:192; height:395; z-index:1; background-color: #99CCFF; border: 1px solid #000000; left:10; top:115">
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3" height="100%">
    <tr>
      <td width="100%" valign="top">{SIDEBAR}</td>
    </tr>
  </table>
</div>
<div id="Layer1" style="position:absolute; width:506; height:395; z-index:1; background-color: #99CCFF; border: 1px solid #000000; left:206; top:115">
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2" height="100%">
    <tr>
      <td width="100%" valign="top">{CONTENT}</td>
    </tr>
  </table>
</div>
Index.php
PHP:
<?php
ob_start();
   include_once "SEARCH.php";
   $cnt1 = ob_get_clean();

ob_start();
   include_once "NAVI.php";
   $cnt2 = ob_get_clean();

ob_start();
   include_once "SIDEBAR.php";
   $cnt3 = ob_get_clean();

ob_start();
   include_once "CONTENT.php";
   $cnt4 = ob_get_clean();

   $design = file_get_contents("Layout.html");
   $design = str_replace("{SEARCH}", $cnt1, $design);
   $design = str_replace("{NAVI}", $cnt2, $design);
   $design = str_replace("{SIDEBAR}", $cnt3, $design);
   $design = str_replace("{CONTENT}", $cnt4, $design);

echo $design;
?>
NAVI.php
PHP:
<?php
$LINK[0] = "?GS=home";
$LINK[1] = "?GS=history-de";
$LINK[2] = "?GS=history-eng";
$LINK[3] = "?GS=error-de";

$anzahl = count($LINK);
for($index = 0; $index < $anzahl; $index++)
{
$linktime = $index+1;
echo ("<a href='$LINK[$index]'>Link$linktime</a>&nbsp;&nbsp;");
}
?>
CONTENT.php
PHP:
<?php 
include('config.php');

if(isset($_GET['GS']) AND isset($dateien[$_GET['GS']]))
{
 if(!file_exists($dateien[$_GET['GS']])) include $dateien['error-de'];

 include $dateien[$_GET['GS']]; 
}
else
{
if($_GET['GS'] == '')
{
include $dateien['home'];
}else{
include $dateien['error-de']; 
}
}
?>
config.php
PHP:
<?php
$dateien = array();
$dateien['home'] = "include/home.php";

$dateien['history-de'] = "include/history-de.php";
$dateien['history-eng'] = "include/history-eng.php";

$dateien['error-de'] = "include/error-de.php";
?>

Restliche Seiten
SEARCH.php
SITEBAR.php

Wegen dem was du meintest von wegen bei Search brauchst du nen IFrame -.-
Machs halt mit $_GET -.- würde hier wunderbar funktionieren ... so kannste dann auch alle anderen Seiten includen ...

Das mein ganze Code geht musst du
- den Ordner include haben
- alle files die in config.php stehen sich in diesem Ordner befinden
- jegliche Dateien die in index.php angegeben sind auch da sein ^^




Hast also nun folgendes:
index.php
Layout.html
SEARCH.php
NAVI.php
SIDEBAR.php
CONTENT.php

Verzeichnise: include
include/home.php
include/error-de.php

include/history-de.php
include/history-eng.php


Bestimmtes kannste jetzt wie du lustig bist ändern -.- hier siehste dann in etwa wie das aussehen kann ^^

http://thekiller.th.funpic.de/manmanman/?GS=home

Viel Spaß damit ^^
 
Zuletzt bearbeitet:
Zurück