Seiten bau mit template

Domi83

Rear Admiral
Registriert
Feb. 2010
Beiträge
5.444
Hallo Leute, ich habe da mal eine kleine Frage..
Ich baue für die Firma eine neue Seite auf und habe immer wieder mal den Bau von Seiten mit Hilfe von Templates angeschaut, doch irgend wie hab ich das nie hin bekommen. Gestern konnte ich mir mal ein Beispiel anschauen von jemand anderem der eine .PHP Datei für sein Template genutzt hatte.

Ich habe das mal grob nach gestellt in einer index.php Datei und anschließend eine sehr namens-kreativen test.php erstellt in der dann mein Gerüst ist.
PHP:
<?php
 header("content-type: text/html; charset=utf-8");

 require_once 'variable.php';

 $tmpl = implode('', file("test.php"));
 $tmpl = preg_replace("=\[content\]=", $content, $tmpl);
 $tmpl = preg_replace("=\[header\]=", $header, $tmpl);
 eval('?>' .  $tmpl);
?>

HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>[header]</title>
 </head>
 <body>
  [content]
 </body>
</html>
Jetzt ist eigentlich meine Frage an Euch Spezies, ist der Anfang schon so richtig? Mich würde ja mal interessieren, wie ich es nun mit einer Ausgabe meiner while Schleife zaubere. Denn da wo [content] steht, sollen jetzt z.B. mehrere Firmen aufgelistet werden :)

Ich hoffe mal der Anfang ist so richtig, und nicht schon völlig falsch. Ich habe mir schon das eine oder andere durchgelesen, aber ich muss immer mit Beispielen arbeiten, sonst steige ich da nie durch :rolleyes:

Mfg. Domi
 
AW: frage, Seiten bau mit template

Ich persönlich würde das nicht so machen weils extrem fricklig ist, aber im Prinzip würde sowas in der Art funktionieren. Nimm lieber ein bewährtes kleines CMS oder - wenn es nur wenige Seiten sind - mach alles in static HTML.

Edit: und ohne Erfahrung Aufträge anzunehmen ist nicht sehr clever.
 
AW: frage, Seiten bau mit template

also dein ansatz hat erstmal einen fehler.
und zwar dass du die template datei per require holst, damit wird die prinzipiell geparst von php und das ist quatsch.
die templatedatei kannste dir per file_get_contents holen.

dann musst du bissl firm mit preg_match sein und schon geht das los.

das stino variablen ersetzen haste ja schon drin.
dan fängste sowas an wie

Code:
[repeater='name']
 [var1] [var2]
[/repeater]

das ganze suchste dir mit preg_match raus. damit hast du schonmal den inhalten (hier [var1] [var2]) in deinem repeater!

jetzt musst du an dein templatesystem nen array übergeben.
am einfachsten sieht das dann so aus.

Code:
 $repeaterdaten[$name] = array(array($varname1 => $varvalue1,$varname2 => $varvalue2),array(/*nächster datensatz für den repeater $name*/))

und dann schnappst dir die daten und durchläufst das einfach.

also das was du dir geschnappt hast mit dem preg_match wird dann solange wie es datensätze in deinem speicherarray gibt durchlaufen.

beispielschnipsel
---
Code:
        public function assignRepeater($name,$data,$parent = null) {
                $this->repeater[$name]["content"][] = $data;
                return true;
}

zum speichern im tpl system der daten, anschliesend zum auslesen

Code:
        public function runRepeater() {
            foreach ($this->repeater as $name => $data) {
                $this->repeater[$name]["post"] = 0;
                preg_match("~\{repeater='$name'\}(.*)\{/repeater\}~sU",$this->html,$snipped);
                if (!isset($snipped[1])) continue;
                $buf = '';
                foreach($data["content"] as $datarow) {
                    $row = $snipped[1];
                    $first = true;
                    foreach($datarow as $varname => $value) {
                        $row = str_replace('{'.$varname.'}',$value,$row);
                    }
                    $buf .= $row;
                }
                $this->html = str_replace($snipped[0],$buf,$this->html);
            }
        }

in meinem beispiel ersetzt der dann zb sowas sauber als liste

Code:
<ul>
{repeater='bsp'}
<li>{listeneintrag}</li>
{/repeater}
</ul>

und zum reinfüttern würd ich dann eben

Code:
... select * from datenbank
while($row = $res->fetchRow()) {
$tpl->assignRepeater("bsp",array("listeneintrag" => $row["headline"]));
}

ganz easy peacy, aber von mir glaube grad nich sonderlich gut erklärt :D

edit:://

zoz schrieb:
Ich persönlich würde das nicht so machen weils extrem fricklig ist, aber im Prinzip würde sowas in der Art funktionieren. Nimm lieber ein bewährtes kleines CMS oder - wenn es nur wenige Seiten sind - mach alles in static HTML.

Edit: und ohne Erfahrung Aufträge anzunehmen ist nicht sehr clever.

son quatsch, klar sollte er ohne plan keine aufträge annehmen, aber nen riesen cms auf sowas loslassen, wenn man nur ne einfache repeatfunktion braucht ist riesen overkill ;)
auch fertige systeme wie smarty und co sind wohl einfach zu viel für sowas.
ich nutz das so in einer "verbesserten" art schon ewig für mich selber und hab auch rein performance mäßig keine probleme, zumal die lösung für mich eben immer "schnell" auf meine bedürfnisse anpassbar ist. selbst if-then-else konstrukte kann man so sehr einfach und effizient umsetzen!
 
Zuletzt bearbeitet:
AW: frage, Seiten bau mit template

Na ja, das mit den Templates ist jetzt nur eine neue Überlegung, um mal ein wenig anders zu bauen. Sonst baue ich die Seiten ja schon funktions-orientiert und mit PHP und HTML, aber das halt in Kombination (in einer Datei und nicht so getrennt).

@zoz, wer sagt denn hier das ich Aufträge ohne Erfahrung annehme? :)
Aber ein CMS kommt nicht in die Tüte.. Grund dafür ist, was selbst gebautes kann ich besser und leichter anpassen als eine Seite die ich in ein Joomla, Typo3, Drupal, Contenido etc. bauen will :)

@easteregg, ne ne.. durch den require_once lade ich den Inhalt, der in den Variablen $content und $header stehen. Meine gefummelte Template Datei wird über den implode eingebunden :)

Also vom Ansatz her, hatte ich eine index.php und eine ausgabe.php und über meine Ausgabe Datei wurde dann mein Inhalt der in der Datenbank steht ausgegeben. Als ganz ganz kurzes Beispiel,
PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title><?php echo "$header" ?></title>
 </head>
 <body>
  <?php echo "$content" ?>
 </body>
</html>
oder um es ganz kurz zu machen <?= "$header" ?>, wobei man mir dazu wiederum sagte das diese Variante der short-tags(?) sehr risikoreich sein soll.

Mfg. Domi
 
AW: frage, Seiten bau mit template

naja shorttags sollte man ohnehin vermeiden, risikoreich nicht, aber halt schlechter stil ;)
und damit erreichste ja auch nicht so richtig das, was hinter nem templatesystem eigentlich steht - trennung vom code und html! ;)
 
AW: frage, Seiten bau mit template

easteregg schrieb:
und damit erreichste ja auch nicht so richtig das, was hinter nem templatesystem eigentlich steht - trennung vom code und html! ;)
Joa, genau das war mal mein Grundgedanke.. Das ich das mal ein wenig trenne. Mehr war auch gar nicht großartig gedacht :)

easteregg schrieb:
naja shorttags sollte man ohnehin vermeiden, risikoreich nicht, aber halt schlechter stil ;)
Ich glaube das lag daran weil nicht jeder Server die shorttags interpretieren kann (oder so). Aber gut, ich werde mir mal ein wenig deinen Code anschauen und schauen ob ich das hin bekomme.

smarty hatte ich auch schon mal hier und dort gelesen, aber da hatte ich ja nur noch große Fragezeichen über dem Kopf :D Aber gut, dann fange ich mal vorsichtig an und schaue was ich da zaubern kann.
 
Zurück
Oben