Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Template Class    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
bcreator.de
Mitglied
Anfänger


Dabei seit: 16.05.2010
Herkunft: 40489 Düsseldorf
Posts: 47
     Template Class Zitat | Bearbeiten

Mit dieser Klasse lassen sich Templates laden und Platzhalter durch vorgegebene Werte ersetzen.

Moin,

ich habe mich durchaus gewundert, dass neben den tollen Codeschnipseln keine Template Klasse vorhanden ist.

Da ich sowieso bisher noch keine Codeschnipsel gepostet habe, wird es nun Zeit. Ich präsentiere eine meiner Klassen aus meinem Framework, die Template Klasse.

Im Prinzip ist an ihr nichts besonders, aber dafür unkompliziert. Hier ist schonmal das ganze Skript:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
<?php
/*
 * Simple Template Klasse
 *
 * Has been written by Dennis S.
 * (c) 2010 bcreator.de
 */

//
// Template Properties: important functions for creating Templates
//
interface TProperties
{
    
/*
     * @function replace(string find, string replace)
     * @example replace("string_to_find", "to_replace")
     */
    
public function replace($find,$replace);

    
/*
     * @function addFile(string File)
     * @example addFile("Path/Filename.ext")
     */
    
public function addFile($File);

    
/*
     * @function init()
     * @description it returns the complete source
     */
    
public function init();
}

class 
Template implements TProperties
{
    
/*
     * NOTICE: You can change here your schemes for replacing content
     * WARNING: DO NOT CHANGE OR REMOVE THE [FILE_NAME] OR [REPLACE_DATA]
     */
    
const FILE_INCLUDE '{include:[FILE_NAME]}'// TMP - Include scheme -> {include:file.ext}
    
const TO_REPLACE_DATA '{[REPLACE_DATA]}'// Replace - scheme -> {replace}

    /*
     * Variable for the whole source
     */
    
protected $Source;

    
/*
     * contruct class
     */
    
public function __construct($File)
    {
        
// Check if file exists
        
if(file_exists($File))
        {
            
$this -> Source file_get_contents($File);
            return 
true;
        }
        else
        {
            return 
false;
        }
    }

    
/*
     * replace function
     */
    
public function replace($find,$replace)
    {
        
$scheme str_replace('[REPLACE_DATA]',$find,self::TO_REPLACE_DATA);
        
$this -> Source str_replace($scheme,$replace,$this -> Source);
    }

    
/*
     * addFile function
     */
    
public function addFile($File)
    {
        if(
file_exists($File))
        {
            
$scheme str_replace('[FILE_NAME]',$File,self::FILE_INCLUDE);
            
$this -> Source str_replace($scheme,file_get_contents($File),$this -> Source);
            return 
true;
        }
        else
        {
            return 
false;
        }
    }

    
/*
     * init function
     */
    
public function init()
    {
        if(
$this -> Source !== null)
            return 
$this -> Source;
    }
}
?>


Bei den Kommentaren ist eigentlich schon alles erklärt, wie man die einzelnen Funktionen der Klasse bedient. Ein Beispiel werde ich aber trotzdem schreiben.

Als erstes müssen wir die Klasse "öffnen":
 PHP 
1:
2:
3:
4:
5:
<?php
...
$tpl = new Template('(Pfad)/BasisTemplate.ext');
...
?>


Zweiter Schritt wäre dann die einzelnen Funktionen zu verwenden, ich werde beide vorstellen:

 PHP 
1:
2:
3:

$tpl -> replace('title','Meine Seite'); // {title} wird zu Meine Seite
$tpl -> addFile('Test/Datei.tpl'); // {include:Test/Datei.tpl} wird durch den Content der Datei Test/Datei.tpl ersetzt


Letzter Schritt wäre dann nur noch zu Debuggen, also das Ergebnis auszugeben:
 PHP 
1:
2:

$tpl -> init();


Ihr könnt gerne Fragen an mich stellen,

Schöne Grüße
Dennis S.


PHP Design Patterns ist sehr empfehlenswert für fortgeschrittene PHP Programmierer.

Post wurde schon 2x editiert, das letzte mal am 06.06.2010 um 10:44 von Andavos
05.06.2010, 21:45 Profil | PM | E-Mail  
splasch
Mitglied
Exzellenter User


Dabei seit: 16.06.2008
Herkunft: Austria
Posts: 2323
      Zitat | Bearbeiten

Das ganze hat einen kleinen Schönheitsfehler. Das einbinden einer weiteren Template Datei muß ja dann 2 mal angeben werden was doch etwas umständlich ist.

Wenn es schon in der Templatedatei selbst angeben wird welche Datei geladen werden soll dann sollte es nicht mehr notwendig sein dies nochmal in der Php Steuerungsdatei anzugeben.


Zu Erinnerung:
In der Templatedatei nennen wir sie BasisTemplate.ext selbst steht irgendwo mitten drin {include:Test/Datei.tpl}
Nun wird der Teil solange ignoriert bis von der Steuerungsdatei der addFile Befehl ausgeführt wird. Dies sollte aber nicht so sein den alle Information welche Datei geladen werden sollen sind bereits ja geben.

Daher sollte der Ersetztvorgang automatisch ablaufen. Ausnahme sind Platzhalter wo voher noch nicht bekannt ist welche Datei geladen werden soll.

PS.
Das ausgeben von Datenbank Inhalten fehlt in der Template Klasse auch noch.

Mfg Splasch




Post wurde schon 2x editiert, das letzte mal am 05.06.2010 um 22:41 von splasch
05.06.2010, 22:40 Profil | PM | E-Mail  
bcreator.de
Mitglied
Anfänger


Dabei seit: 16.05.2010
Herkunft: 40489 Düsseldorf
Posts: 47
      Zitat | Bearbeiten

Zitat:
Orginal von splasch
Das ganze hat einen kleinen Schönheitsfehler. Das einbinden einer weiteren Template Datei muß ja dann 2 mal angeben werden was doch etwas umständlich ist.

Das ist kein Fehler, sondern Geschmackssache. Es ist völlig egal, ob die Dateiinhalte automatisch eingefügt werden.

Zitat:
Zu Erinnerung:
In der Templatedatei nennen wir sie BasisTemplate.ext selbst steht irgendwo mitten drin {include:Test/Datei.tpl}
Nun wird der Teil solange ignoriert bis von der Steuerungsdatei der addFile Befehl ausgeführt wird. Dies sollte aber nicht so sein den alle Information welche Datei geladen werden sollen sind bereits ja geben

Wieso ist es schlimm, wenn der Teil ignoriert wird?

Zitat:
Das ausgeben von Datenbank Inhalten fehlt in der Template Klasse auch noch.


Das ist unsinnig und gehört garantiert nicht zu einer standard-Template Klasse. Wenn du Datenbankinhalte ausgeben möchtest, verwende eine MySQL Klasse und kombiniere sie mit der Template Klasse.

Schöne Grüße,
Dennis S.


PHP Design Patterns ist sehr empfehlenswert für fortgeschrittene PHP Programmierer.

Post wurde schon 1x editiert, das letzte mal am 05.06.2010 um 23:15 von bcreator.de
05.06.2010, 23:14 Profil | PM | E-Mail  
splasch
Mitglied
Exzellenter User


Dabei seit: 16.06.2008
Herkunft: Austria
Posts: 2323
      Zitat | Bearbeiten

Zitat:
Das ist kein Fehler, das ist Geschmackssache


Redunaz ist keine Geschmacksache sonderen weißt auf einen schlechten Programmierstil hin.

Zitat:
Das ist unsinnig und gehört garantiert nicht zu einer standard-Template Klasse. Wenn du Datenbankinhalte ausgeben möchtest, verwende eine MySQL Klasse und kombiniere sie mit der Template Klasse.


Du vergisst dabei die Html Formatierung bei der Ausgabe der Datensätze.

Beispiel du hast mehre Datensätze die in Tabelarischer Form ausgeben werden sollen.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:

<table>
// Datensatz 1
 <tr>
  <td>Datensatz-Spalte1</td>
  <td>Datensatz-Spalte2</td>
  <td>Datensatz-Spalte3</td>
 </tr>
 // Datensatz 2
 <tr>
  <td>Datensatz-Spalte1</td>
  <td>Datensatz-Spalte2</td>
  <td>Datensatz-Spalte3</td>
 </tr>
 // Datensatz 3
 <tr>
  <td>Datensatz-Spalte1</td>
  <td>Datensatz-Spalte2</td>
  <td>Datensatz-Spalte3</td>
 </tr>
// und so weiter
</table>


Wie sieht da nun deine Template datei mit den Platzhaltern aus.Wenn du es kombinierst so wie du es gesagt hast werst du gezwungen die Html bfehle in die Steuerung datei zu schreiben.

Somit hättes du dann aber keine Template trennung mehr.

Mfg Splasch




Post wurde schon 3x editiert, das letzte mal am 05.06.2010 um 23:26 von splasch
05.06.2010, 23:23 Profil | PM | E-Mail  
bcreator.de
Mitglied
Anfänger


Dabei seit: 16.05.2010
Herkunft: 40489 Düsseldorf
Posts: 47
      Zitat | Bearbeiten

Zitat:
Orginal von splasch
Zitat:
Das ist kein Fehler, das ist Geschmackssache


Redunaz ist keine Geschmacksache sonderen weißt auf einen schlechten Programmierstil hin.


Mach dich bitte nicht lächerlich. Beide Möglichkeiten sind zwar verschieden, haben aber keinen Einfluss auf den Programmierstil.

Zitat:
Du vergisst dabei die Html Formatierung bei der Ausgabe der Datensätze.

Beispiel du hast mehre Datensätze die in Tabelarischer Form ausgeben werden sollen.


Man kann genauso gut und elegant mehrmals diese Klasse verwenden.

Schöne Grüße, Dennis S.


PHP Design Patterns ist sehr empfehlenswert für fortgeschrittene PHP Programmierer.
05.06.2010, 23:35 Profil | PM | E-Mail  
splasch
Mitglied
Exzellenter User


Dabei seit: 16.06.2008
Herkunft: Austria
Posts: 2323
      Zitat | Bearbeiten

Zitat:
Man kann genauso gut und elegant mehrmals diese Klasse verwenden.


Gib uns doch bitte ein Beispiel zu der oben genanten Template struktur(Tabelarische Ausgabe). Wie du bei der Datenbank Ausgabe die Klasse mehrmals nutz.Bei jeden Datensatz 1 mal oder wie ist das zu verstehen?

Mfg Splasch


05.06.2010, 23:56 Profil | PM | E-Mail  
bcreator.de
Mitglied
Anfänger


Dabei seit: 16.05.2010
Herkunft: 40489 Düsseldorf
Posts: 47
      Zitat | Bearbeiten

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
<?php
/*
 * Sonder Applikation
 */

include('Class/Template.inc.php');
include(
'Class/Mysql.inc.php');

//
// Definiere $tpl, $mysql
//
$tpl = new Template('Template/layout.tpl');
$mysql = new mysql('server','username','******','database');

try
{
    if(!
$mysql -> isConnection())
        throw new 
Exception('Fehler, konnte keine Verbindung zum MySQL Server herstellen!');
} catch(
Exception $e) { print $e -> getMessage(); }

$tpl -> replace('page.title','Meine Homepage');

//
// Beginning of Content
//
$tpl -> addFile('Template/content.tpl');


    
$mysql_datas '<table>';
    
$mysql -> query("SELECT * FROM vehicles WHERE kind='car'");

        while(
$row $mysql -> row())
        {
            
$dat = new Template('Template/row.tpl');
            
$dat -> replace('column_1',$row -> name);
            
$dat -> replace('column_2',$row -> kind);
            
$dat -> replace('column_3',$row -> price);
            
$mysql_datas .= $dat -> init();
        }
    
    
$mysql_datas .= '</table>';

$tpl -> replace('mysql_datas',$mysql_datas);
print 
$tpl -> init();
?>


Bitteschön. Und nichts ist oder war kompliziert.

Schöne Grüße,
Dennis S.


PHP Design Patterns ist sehr empfehlenswert für fortgeschrittene PHP Programmierer.
06.06.2010, 00:15 Profil | PM | E-Mail  
splasch
Mitglied
Exzellenter User


Dabei seit: 16.06.2008
Herkunft: Austria
Posts: 2323
      Zitat | Bearbeiten

Nun hast du doch wieder Html befehle in deiner Steuerungsdatei. Und das schon bei einen sehr einfachen Html aufbau.


Ps.
Wie weit die übersichtlichkeit dabei bewahrt bleibt ist nee andere sache wenn man für jeden kleinen Teil eine neue Template Datei erstellen muß. Die Lösung mag zwar funktionieren ist aber umständlich.

Mfg Splasch




Post wurde schon 4x editiert, das letzte mal am 06.06.2010 um 00:32 von splasch
06.06.2010, 00:24 Profil | PM | E-Mail  
bcreator.de
Mitglied
Anfänger


Dabei seit: 16.05.2010
Herkunft: 40489 Düsseldorf
Posts: 47
      Zitat | Bearbeiten

Zitat:
Orginal von splasch
Nun hast du doch wieder Html befehle in deiner Steuerungsdatei.

Wie weit der Speicher überladen wird sei mal dahingestellt.
(Und pro Datensatz 1 Template Objekt)

Mfg Splasch


Gut, den HTML Befehl kann ich ja rauslassen und wieder meine Template Klasse verwenden, ist ja kein Ding.

Der Speicher wird bei 3 Datensätzen wohl kaum überladen. Und wenn ich meinetwegen Tausend Datensätze hätte, würde es so oder so lange laden. Hier gibt es nun nichts mehr zu meckern.

Ich gehe schlafen, ich habe keine Lust mehr über so einen Kinderkram zu diskutieren.

Wiedersehen,
Dennis S.



PHP Design Patterns ist sehr empfehlenswert für fortgeschrittene PHP Programmierer.

Post wurde schon 1x editiert, das letzte mal am 06.06.2010 um 00:30 von bcreator.de
06.06.2010, 00:29 Profil | PM | E-Mail  
splasch
Mitglied
Exzellenter User


Dabei seit: 16.06.2008
Herkunft: Austria
Posts: 2323
      Zitat | Bearbeiten

Gute nacht. Da das gleiche Objekt immer wieder überschrieben wird sollte das mit dem Speicher kein Problem werden da er dadurch auch wieder gelöscht wird.

Hab ich vorhin übersehen. Ist ja auch schon Spät.

Aber mal schön auch andere Lösungsansetze zu sehen. Die meist verwendeten Sachen sollte man am besten immer gleich mit als Beispiel angeben.

Mfg Splasch


06.06.2010, 00:35 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Template Class   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz