PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
» MySQL
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
PHP Forum
Mathe Nachhilfe
Suchmaschinenoptimierung

Meine Template klasse: Klein aber Oho

Zurück zur Übersicht

Das ist sie Meine Template Klasse:
 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:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
<?php
/**
* @author Mogria <m0gr14@gmail.com>
* @version 0.2
*
*/

class mtpl {

    
/**
    *  Der Pfad zur Template Datei
    *  @var <string> $file
    */

    
private $file;

    
/**
    *  Enthält alle Variablen die ersetzt werden.
    *  Im Index befindet sich der Variabelnname
    *  und der dazugehörige Wert ist der Wert der Variable
    *  @var <array> $vars
    */
    
private $vars = Array();

    
/**
    * Konstrucktor
    * Hier wird geprüft ob die angegebene Datei existiert.
    * Wenn nicht wird eine Fehlermeldung ausgegeben.
    * @param <string> $file der Pfad zur Templatedatei
    */
    
public function __construct ($file) {
        if( 
is_file ($file) ) {
            
$this->file $file;
        } else {
            die ( 
"<strong>FEHLER: </strong>Die angebene Template-Datei \"$file\" existiert nicht!");
        }
    }

    
/**
    * Hier werden Variablen gesammelt die später im Template File eingesetzt werden
    * @param <string> $var Name der Variable
    * @param <string> $value Inhalt der Variable
    */
    
public function setvar($var$value) {
        
$this->vars[$var] = $value;
    }

    
/**
    * Gibt die angegebene Variable zurück die mit setvar() definiert hat.
    * Falls sie nicht existiert wird false zurückgegeben.
    *
    * @param <string> Variablenname
    * @return <mixed> inhalt der Variable on success, <bool> false on failure.
    */
    
public function getvar($var) {
        if (
$this->varexists($var)) {
            return 
$var;
        } else {
            return 
false;
        }
    }

    
/**
    * Prüft ob eine Variable bereits mit setvar gesetzt wurde
    *
    * @param <string> Variabelnname
    * @return <bool> true on success, false on failure
    */
    
public function varexists($var) {
        return isset(
$this->vars[$var]);
    }

    
/**
    * Hier kann man mehrere Variabeln auf einmal angeben.
    * Im index den Variablenamen und der dazugehörige wert ist der Inhalt der Variable
    *
    * @param <array> $array
    */
    
public function array_setvar($array) {
        
$keys array_keys($array);
        
$value array_values($array);
        foreach( 
$keys as $k => $key){
            if(!
ctype_digit($key))
                
$this->setvar($key$value[$k]);
        }
    }

    
/**
    * Der Inhalt der Template Datei wird umgeformt, damit es eval ausführen kann.
    * @return <string> Der geparste inhalt von der Datei dessen Pfad in der Eigenschaft $file festgelegt ist
    */
    
private function parse() {
         
//Die Template Datei wird ausgelesen
         
$var file_get_contents($this->file);
         
//alle " werden escaped
         
$var str_replace('"','\\"'$var);
         
$var str_replace'?}'' echo "'str_replace('{?''"; '$var ));
         
$var str_replace'.}'' . "'str_replace('{.''" . '$var ));
         
$var preg_replace_callback('`"; (.*?) echo "`si'create_function'$treffer''return str_replace(\'\\"\', \'"\',$treffer[0]);') , $var);
         
$var preg_replace_callback('`" \. (.*?) \. "`si'create_function'$treffer''return str_replace(\'\\"\', \'"\',$treffer[0]);') , $var);
         return 
$var;
    }

    
/**
    * Gibt den Geparsten Inhalt der Template Datei aus
    * @return <string>
    */
    
public function output() {
        
//Die Ausgabe wird angehalten
        
ob_start();
        
//Alle Variablen werden extrahiert
        
extract($this->varsEXTR_SKIP);
        
//Die Ausgabe wird kommt in den Ausgabepuffer
        
eval('echo "' $this->parse() . '";');
        
//Der Ausgabepuffer wird der variable ausgabe zugewiesen
        
$ausgabe ob_get_contents();
        
//Der Ausgabepuffer wird geleert
        
ob_end_clean();
        
//Der Inhalt des Ausgabepuffers wird zurückgegeben
        
return $ausgabe;
    }
}

?>


Da ihr jetzt sehrwahrscheindlich eh nur drübergeflogen seid, und nicht wisst um was es geht, mach ich euch ein Anwendungs Beispiel.

Das ist unsere Template Datei 'test.tpl':
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>$titel</title>
</head>
<body>
    <h1>$heading</h1>
    <p>$text</p>
    <table border="1" cellpadding="2">
        {? foreach($chars as $k => $char) { ?}
        <tr>
            <td>{. ($k + 1 ) .}</td>
            <td>{. $char .}</td>
        </tr>
        {? } ?}
    </table>
    <p>Heute ist der {. date('d.m') .} im Jahre {. date("Y") .}</p>
</body>
</html>


Und das ist unsere php Datei 'test.php':
 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:
<?php
//Die Klasse wird eingebunden
require_once("mtpl.class.php");
//Das Objekt wird erstellt
$tpl = new mtpl("test.tpl");

//Drei Variabeln werden auf einmal gesetzt
$tpl->array_setvar(
    Array(
        
'titel' => "Alphabet",
        
'heading' => "Die Buchstaben des Alphabet's",
        
'text' => "Hier sehen sie Alle 26 Buchstaben des Alphabets"
    
)
);

//Es werden alle Buchstaben des Alphabets geholt
$buchstaben = Array();
for(
$i 0$i<26$i++){
    
$buchstaben[] = chr($i 97);
}

//Die Variable "chars" wird gesetzt
$tpl->setvar('chars'$buchstaben);
//Das Template Wird geparst & ausgegeben
echo $tpl->output();

?>


Und das ist der Quellcode der in den Browser kommt:
 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:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Alphabet</title>
</head>
<body>
    <h1>Die Buchstaben des Alphabet's</h1>
    <p>Hier sehen sie Alle 26 Buchstaben des Alphabets</p>
    <table border="1" cellpadding="2">
        
        <tr>
            <td>1</td>
            <td>a</td>                
        </tr>
        
        <tr>
            <td>2</td>
            <td>b</td>                
        </tr>
        
        <tr>
            <td>3</td>
            <td>c</td>                
        </tr>
        
        <tr>
            <td>4</td>
            <td>d</td>                
        </tr>
        
        <tr>
            <td>5</td>
            <td>e</td>                
        </tr>
        
        <tr>
            <td>6</td>
            <td>f</td>                
        </tr>
        
        <tr>
            <td>7</td>
            <td>g</td>                
        </tr>
        
        <tr>
            <td>8</td>
            <td>h</td>                
        </tr>
        
        <tr>
            <td>9</td>
            <td>i</td>                
        </tr>
        
        <tr>
            <td>10</td>
            <td>j</td>                
        </tr>
        
        <tr>
            <td>11</td>
            <td>k</td>                
        </tr>
        
        <tr>
            <td>12</td>
            <td>l</td>                
        </tr>
        
        <tr>
            <td>13</td>
            <td>m</td>                
        </tr>
        
        <tr>
            <td>14</td>
            <td>n</td>                
        </tr>
        
        <tr>
            <td>15</td>
            <td>o</td>                
        </tr>
        
        <tr>
            <td>16</td>
            <td>p</td>                
        </tr>
        
        <tr>
            <td>17</td>
            <td>q</td>                
        </tr>
        
        <tr>
            <td>18</td>
            <td>r</td>                
        </tr>
        
        <tr>
            <td>19</td>
            <td>s</td>                
        </tr>
        
        <tr>
            <td>20</td>
            <td>t</td>                
        </tr>
        
        <tr>
            <td>21</td>
            <td>u</td>                
        </tr>
        
        <tr>
            <td>22</td>
            <td>v</td>                
        </tr>
        
        <tr>
            <td>23</td>
            <td>w</td>                
        </tr>
        
        <tr>
            <td>24</td>
            <td>x</td>                
        </tr>
        
        <tr>
            <td>25</td>
            <td>y</td>                
        </tr>
        
        <tr>
            <td>26</td>
            <td>z</td>                
        </tr>
        
    </table>
    <p>Heute ist der 26.07 im Jahre 2010</p>
</body>
</html>


Erklärung des Output Vorgangs: In der Funktion output() wird die Ausgabepufferung aktiviert. Alles was jetzt Ausgegeben wird z.B. mit echo, kommt in den Ausgabepuffer. Nun werden alle Variabeln die Vorher gesetzt wurden extrahiert. d.h. ein $array['index'] = "inhalt" wird zu $index = "inhalt".

Danach wird die Parse Funktion aufgerufen, und die Am anfang angegebene Datei wird ausgelesen. Es werden alle " escaped & alle {. werden zu " . , .} wird zu . " , {? wird zu "; , ?} wird zu echo " . Mit den 2 preg_replace_callback werden die slashes vor " entfernt die sich in einen von den bereichen {? ?} oder {. .} befinden, damit keine Fehler aufstreten, wenn man darin strings schreibt mit dem Double Qout.

Das Ergebnis wird zurückgegeben und per eval & echo ausgegeben, damit die Variablen die wir aus den Array geholt haben ihre Wirkung nehmen.
Eval führt Folgenden PHP code aus:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
<?
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
  <title>$titel</title>
</head>
<body>
    <h1>$heading</h1>
    <p>$text</p>
    <table border=\"1\" cellpadding=\"2\">
        "
;  foreach($chars as $k => $char) {  echo "
        <tr>
            <td>" 
.  ($k )  . "</td>
            <td>" 
.  $char  "</td>                
        </tr>
        "
;  }  echo "
    </table>
    <p>Heute ist der " 
.  date('d.m')  . " im Jahre " .  date("Y")  . "</p>
</body>
</html>"
;


Das ganze geht so in den Ausgabepuffer. Der Ausgabepuffer wird der Variable $ausgabe zugewiesen. Der Ausgabepuffer wird geleert, und die Ausgabepufferung wird abgeschalten.
$ausgabe wird zurückgegeben. Und schliesslich dann in test.php mit echo ausgegeben...

mfg
Mogria


Kommentare

Zurück zur Übersicht

Autor Mogria

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Entwickler Forum

» insert nach login

» Tabellenzelle zu groß







© PHP-Einfach.de 2003 - 2012