WinFuture-Forum.de: Template Engine Selber Schreiben ? - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Template Engine Selber Schreiben ?


#1 _Benjamin_

  • Gruppe: Gäste

geschrieben 02. Juni 2005 - 10:37

Servus,

bilang benutze ich eine art von Template System. Eher ein str_replace
<?php
$datei=file_get_contents('template/show_news.html');
 $original[0]="{TITEL}";
 $original[1]="{AUTOR}";

 $neu[0]="Dein eigenes Templatesytem";
 $neu[1]="Dein Name";

$return=str_replace($original,$neu,$datei);
echo $return;
?>

mit der html datei
<html>
<body>
{TITEL}<br>
{AUTOR}
</body>
</html>


funktioniert auch, nur ist das keine Template Engine ... und ein wenig aufwendiger ...

Wie schreibe ich selber eine Engine die im Prinzip die oben genannten Aufgaben lösen kann ? Bzw. was is dabei zu beachten. Hat evt. jemand dazu ne kleine anleitung / einleitung ?
0

Anzeige



#2 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 02. Juni 2005 - 11:08

Was wäre für dich denn der Unterschied zwischen einer "Engine" und deinem Skript?
Ich würde es wahrscheinlich mit einer Funktion so oder ähnlich machen:

function template($vars, $file)
{
  if(file_exists($file) && ($file_content = file_get_contents($file)))
  {
    foreach($vars as $name => $value)
    {
      $file_content = str_replace('{'.$name.'}',$value,$file_content);
    }
    return $file_content;
  }
  else return FALSE;
}

$variablen['TITEL'] = "Dein eigenes Templatesytem";
$variablen['AUTOR'] = "Dein Name";
$datei = 'template/show_news.html';

echo template($variablen,$datei);

0

#3 _Benjamin_

  • Gruppe: Gäste

geschrieben 02. Juni 2005 - 11:10

naja ... ich muss meine variablen immer so anpassen das sie für die templates sind bsp. für news $title;$date$.... usw. und bei der memberliste halt $name,$email,usw. das ist dann halt immer aufwendiger ^^
0

#4 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 02. Juni 2005 - 11:19

Zitat (Benjamin: 02.06.2005, 12:10)

naja ... ich muss meine variablen immer so anpassen das sie für die templates sind bsp. für news $title;$date$.... usw. und bei der memberliste halt $name,$email,usw. das ist dann halt immer aufwendiger ^^
<{POST_SNAPBACK}>


Ich verstehe grade nicht, wie das ganze ohne unterschiedliche Variablen funktionieren soll. Wenn du in deem Template {Titel} hast, ist es doch normal, dass man auch irgendwo sowas wie $vars['TITEL'] = 'wert' angeben muss oder nicht?
0

#5 _Benjamin_

  • Gruppe: Gäste

geschrieben 02. Juni 2005 - 11:21

hmm ... sicherlich.

nur soweit ich mich erinnern kann gibt es noch eine andere möglichkeit das zu lösen .... aber ich komm nimma drauf :) ...
0

#6 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 02. Juni 2005 - 17:24

Vermutlich meinst du, dass die Variablen im Template nicht den gleichen Namen haben sollen wie die Variablen in deinem PHP-Script. Oder verstehe ich das falsch? Z.B. so:

<?php

class template;
{
   private $vars = array();
   
   function anzeigen($file)
   {
      // Lade Datei. Bla, bla, bla ...
   
      foreach($vars as $name => $value)
      {
         $file_content = str_replace('{'.$name.'}', $value, $file_content);
      }
   
   // Datei anzeigen. Bla, bla, bla
   }
   
   // Funktion, mit denen man Variablen vom PHP-Script
   // unter anderem Namen an das Template uebergeben kann
   
   function zuweisen($variable, $content)
   {  
      $this->vars[$variable] = $content;
   }
}

?>


Nun koennte man es aus dem PHP-Script wie folgt machen:

$template = new template;

$meinewerte = 'Hallo!';
$template->zuweisen('testvariable', $meinewerte);
$template->anzeigen('test.html');


Was das, was du meintest?

Gruesse,
PW
0

#7 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 02. Juni 2005 - 19:55

Ich mache die einfachsten Templates einfach mit PHP-Funktionen, aber das gefällt Benjamin ja leider nicht.
Es geht aber nicht leichter und funktioniert bestens, kann man auch wunderbar erweitern...
Einfach eine Datei design.inc.php mit folgendem Inhalt:

<?php
#******************************
#* PHP/HTML/CSS - TEMPLATE
#* Copyright (c) 05/2005
#* [email protected]
#******************************

  function seite_anfang($titel)
  {

  include('functions.inc.php');
  header("Content-Style-Type:text/css");
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>
  <title>Seitentitel :: <?php echo $titel; ?></title>
  <link rel="stylesheet" type="text/css" media="screen" href="tpl/style.css">
</head>

<body>

    <div id="header">

        <?php include('tpl/menu.html'); ?>

    </div>

	<div id="site">

  <?php
  }
  function seite_ende()
  {
  ?>

	</div>

</body>

</html>

  <?php
  }
  ?>


So und in einer Beispieldatei, z.B. index.php kommt dann nur folgendes:

<?php
incldue('design.inc.php);
seite_anfang("Index als Titel");
?>

Der HTML Code oder einfach der Inhalt, der an der Hauptstelle angezeigt wird...
?>

<?php
seite_ende();
?>


Und das war's dann, wenn man die design.inc.php verändert, dann ändert das das Aussehen aller Unterseiten und ist recht praktisch...
Man kann auch mehrere Untermenus einbauen, wie man will.

Ich persönlich finde es praktisch, hat aber auch einen Nachteil: Man kann keinen header(); setzen, da stören die Leerzeilen in der design.inc.php

Ansonsten war das meine Idee und diese finde ich schlicht und sie funktioniert :imao:

Leider wird der Code hier bisschen unübersichtlich angezeigt, aber mit Syntax und dem richtigen Programm sieht das schon wesentlich besser aus. Wollte ich nur noch einmal erwähnen :)

Dieser Beitrag wurde von Slayer bearbeitet: 02. Juni 2005 - 19:57

Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#8 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 02. Juni 2005 - 20:43

Zitat

aber das gefällt Benjamin ja leider nicht.


Wie du sicherlich weißt, mir auch nicht :-P
0

#9 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 02. Juni 2005 - 20:53

Zitat (Floele: 02.06.2005, 21:43)

Wie du sicherlich weißt, mir auch nicht :-P
<{POST_SNAPBACK}>

Ja, das weiß ich :D

Das gefällt sicher vielen nicht, aber ich finde es praktisch und wollte meine "Tempalte-Engine" hier auch mal vorschlagen...
Für den Einstieg ist das optimal und vor allem schlicht, das ist das Gute daran.

Aber egal, über das kann man sich streiten.
Deshalb lassen wir die Diskussion darüber besser ;)
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#10 _Benjamin_

  • Gruppe: Gäste

geschrieben 02. Juni 2005 - 22:29

hmm nein ;) diskutieren sollte man darüber schon ;) ganz einfach weil es ja viele wege gibt, aber deins ist leider absolut kein template-engine weil es einfach nur ein include ist.

@PelzigesWaldtier: sowas kommt dem ganzen schon etwas näher ja :)

@Slayer: mir geht es nicht um easy code ... mir geht es darum das ich eine engine haben möchte - kein direktes str_replace oder include ... das ist zu simpel :D mag einfach mal was neues machen was auch ruhig ein wenig heftiger im code ist ... damit kann ich leben ;)
0

#11 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 03. Juni 2005 - 05:28

Zitat (Benjamin: 02.06.2005, 15:29)

mir geht es darum das ich eine engine haben möchte - kein direktes str_replace oder include ... das ist zu simpel :D mag einfach mal was neues machen was auch ruhig ein wenig heftiger im code ist ... damit kann ich leben ;)<{POST_SNAPBACK}>


Ich sehe nicht, warum du kein str_replace() verwenden solltest. Man kann zwar regulaere Ausdruecke (Funktion preg_replace()) benutzen. Diese sind aber viel langsamer und machen auch nichts anderes, als in deinem Fall str_replace(). Sie koennen vielleicht nachher nuetzlich sein, wenn man Templatevariablen im Template veraendern will. Z.B. Koennte man {datum|date_format:"Y"} ins Template schreiben, um das Jahr aus der Variable datum zu holen, welche einen Unixtimestamp enthaelt. Das ist allerdings nur Spielerei, wie ich finde, da man das auch sehr gut im PHP-Script selber machen koennte. Ich wollte nur zeigen, wann sich regulaere Ausdruecke ueberhaupt lohnen. Fazit also: str_replace() reicht vollkommen aus.

Gute Nacht,
PelzigesWaldtier
0

#12 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 03. Juni 2005 - 06:38

Zitat

mir geht es darum das ich eine engine haben möchte - kein direktes str_replace oder include ... das ist zu simpel 


Manchmal ist weniger mehr. Bei Templates fände ich es ziemlich unsinng den Code zu kompliziert wie möglich zu machen, nur damit man eine "engine" hat. Besonders bei Templates sollte doch Geschwindigkeit im Vordergrund stehen, oder nicht?
0

#13 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 03. Juni 2005 - 13:16

Zitat (Floele: 03.06.2005, 07:38)

Manchmal ist weniger mehr. Bei Templates fände ich es ziemlich unsinng den Code zu kompliziert wie möglich zu machen, nur damit man eine "engine" hat. Besonders bei Templates sollte doch Geschwindigkeit im Vordergrund stehen, oder nicht?
<{POST_SNAPBACK}>

Das ist genau meine Meinung!
Umso leichter und umso weniger Code, desto besser und desto schneller läuft es!

Aber ich weiß schon was Benjamin meint :D
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#14 Mitglied ist offline   Yalamand 

  • Gruppe: aktive Mitglieder
  • Beiträge: 101
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 06. Juni 2005 - 13:19

hast du schon mal versucht eine etwas grobere template engine wie smarty.php.net zu verwenden, vor allem wegen des cachings das eine dauernde neue compilierung und den ständigen datenbankzugriff zu verhindern weiss? scheint von der menge der codezeilen ein ziemliches monster zu sein, kann aber trotzdem mit richtig gesetztem caching wunderschön schnell sein.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0