+ Antworten
Ergebnis 1 bis 7 von 7

Hilfen zu Templates

Eine Diskussion über Hilfen zu Templates im Forum Technik Ecke. Teil des Off Topic-Bereichs; Nach numehr einem Monat Lustlosigkeit in Sachen Coding will ich mich jetzt mal wieder ein bisschen mit der Materie beschäftigen, ...

  1. #1

    Hilfen zu Templates

    Nach numehr einem Monat Lustlosigkeit in Sachen Coding will ich mich jetzt mal wieder ein bisschen mit der Materie beschäftigen, bevor im März die nächsten großen Klausuren anstehen.

    Ich bin nun beim Themengebiet OOP und u.a. auch bei den viel erwähnten Templates hängengeblieben. Ich habe mir dabei schon diverse Tutorials angesehen, komme aber auf keinen Nenner, da die meisten davon entweder elendig lang sind und/oder man die Vorgehensweise nicht versteht, zumal es anscheinend jeder Coder anders macht. Kurz gesagt, ist der Funke einfach noch nicht übergesprungen und daher frag ich hier mal an, ob jemand gute Tuts kennt, die man mit Semikenntnissen bewältigen kann, ohne viel Zeit aufwenden zu müssen.

  2. #2
    Es gibt keine eindeutige Meinung über Templates, zB. ist es für einige ok wenn noch php stücke imn den Templates übrig bleiben, andere, wie ich ^^, wollen eine strikte trennung und die arbeitsweise der scripte ist auch völlig anders.

    Willst du jetzt erstmal OOP lernen, oder hast du dies schon einigermaßen verstanden, oder willst du templates machen ?? ich kann dir gerne mal meine klasse zeigen und genau erklären, es gibt nicht gerade viele punkte, die ein templatesystem können muss

    ( es muss nur wissen wo es anfängt, aus der template sehen können, ob es weitere templates laden muss, was ja so gedacht ist, und variablen inhalt ersetzen. danach folgt dann auch schon die ausgabe )

  3. #3
    Mhm, ich würde mir gern mal deine Klasse anschauen und dann ggf Fragen stellen, wenn ich bei bestimmten Punkten nicht weiterkomme.

    Das Tut von tutorials.de ist mir zu flach, das kann sogut wie nix und das von proggen.net war unendlich lang. Das bei Yubb.de ist auch seltsam und dann war da noch eins bei webmasterpro wo ich noch nicht groß durchgeschaut habe.

    Bis dato hab ich alles "hardcoded". Sprich, das Aussehen (Struktur, der Rest war extern in einem Stylesheet) der Ausgabe war bereits im Skript festgelegt, was etwaig Änderungen im Nachhinein natürlich erschwert. Aber für mein kleines Anfängertestprojekt hats gereicht. Jetzt treibt mich der Fortschritt

  4. #4
    gerne, hier:

    1. <?php
    2. class tpl
    3. {
    4. // function __construct Variable
    5. var $template = array();
    6. // function tpl_get() Variablen
    7. var $get = array();
    8. var $pre = array();
    9. // function tpl_edit_tpl() Variablen
    10. var $preg = array();
    11.  
    12. // Konstrukt
    13. function tpl($template,&$sql=NULL)
    14. {
    15. if(is_array($template))
    16. {
    17. for ($i=0;$i<count($template);$i++)
    18. if (array_search($template[$i],$this->pre)===false)
    19. $this->template[] = & $template[$i];
    20. }
    21. else
    22. if (array_search($template,$this->pre)===false)
    23. $this->template[] = & $template;
    24. if (isset($sql))
    25. {
    26. $this->sql = &$sql;
    27. $this->tpl_get_sql();
    28. }
    29. else
    30. $this->tpl_get_ftp();
    31. $this->tpl_edit_var();
    32. $this->tpl_edit_tpl();
    33. $this->tpl_output();
    34. }
    35.  
    36. // Templatedaten per FTP ( Falls es mit Unterordner sein soll .$this->preg[$this->get[GLOBAL_PATH[$i]]].'/'. )
    37. function tpl_get_ftp()
    38. {
    39. for ($i=0;$i<count($this->template);$i++) // StammTemplates werden geladen
    40. if(!file_exists(GLOBAL_PATH.'templates/'.$this->template[$i].'.tpl.php'))
    41. return $this->tpl_errmsg('Die Template <code>'.$this->template[$i].'.tpl.php</code> existiert nicht!');
    42. else
    43. $this->get[$this->template[$i]]=implode('',file(GLOBAL_PATH.'templates/'.$this->template[$i].'.tpl.php'));
    44. $this->pre = $this->template;
    45. for ($i=0;$i<count($this->pre);$i++) //SubTemplates werden geladen
    46. {
    47. preg_match_all('%{([^$](.+))}%iU',$this->get[$this->pre[$i]],$this->preg[$this->pre[$i]]);
    48. for ($n=0;$n<count($this->preg[$this->pre[$i]][0]);$n++)
    49. {
    50. if(preg_match('%^{!.+}$%iU',$this->preg[$this->pre[$i]][0][$n]))
    51. $this->preg[$this->pre[$i]][1][$n] = $GLOBALS['_tpl'][$this->preg[$this->pre[$i]][2][$n]];
    52. if (!is_string($this->preg[$this->pre[$i]][1][$n]))
    53. return $this->tpl_errmsg('Die Templatevariable <code>'.$this->preg[$this->pre[$i]][1][$n].'</code> ist kein string oder nicht definiert!<br>');
    54. elseif(!file_exists(GLOBAL_PATH.'templates/'.$this->preg[$this->pre[$i]][1][$n].'.tpl.php'))
    55. return $this->tpl_errmsg('Die Template <code>'.$this->preg[$this->pre[$i]][1][$n].'.tpl.php</code> existiert nicht!<br>');
    56. else
    57. {
    58. if (array_search($this->pre[$i].'__'.$this->preg[$this->pre[$i]][1][$n],$this->pre)===false)
    59. $this->get[$this->pre[$i].'__'.$this->preg[$this->pre[$i]][1][$n]]=implode('',file(GLOBAL_PATH.'templates/'.$this->preg[$this->pre[$i]][1][$n].'.tpl.php'));
    60. $this->pre[] = $this->pre[$i].'__'.$this->preg[$this->pre[$i]][1][$n];
    61. }
    62. }
    63. }
    64. }
    65.  
    66. // Templatedaten per SQL ( Die TemplateDaten müssen in der Spalte 'inhalt' stehen )
    67. function tpl_get_sql()
    68. {
    69. $query['tpl_template'] = "SELECT `inhalt` FROM `template` WHERE "; // StammTemplates werden geladen
    70. for ($i=0;$i<count($this->template);$i++)
    71. $tpl_query[] = "`name`='".$this->template[$i]."'";
    72. $query['tpl_template'] .= implode(' OR ',$tpl_query);
    73. $this->sql->db_query($query); unset($query);
    74. if (empty($this->sql->fetch['tpl_template']))
    75. return $this->tpl_errmsg('Die Template(s) konnte(n) in der Datenbank nicht gefunden werden!');
    76. $this->pre = $this->template;
    77. for ($i=0;$i<count($this->sql->fetch['tpl_template']);$i++)
    78. $this->get[$this->pre[$i]] = $this->sql->fetch['tpl_template'][$i]['inhalt'];
    79. for ($i=0;$i<count($this->pre);$i++) //SubTemplates werden geladen
    80. {
    81. unset($tpl_query);
    82. unset($this->sql->fetch);
    83. preg_match_all('%{([^$](.+))}%iU',$this->get[$this->pre[$i]],$this->preg[$this->pre[$i]]);
    84. for ($n=0;$n<count($this->preg[$this->pre[$i]][0]);$n++)
    85. {
    86. if(preg_match('%^{!.+}$%iU',$this->preg[$this->pre[$i]][0][$n]))
    87. $this->preg[$this->pre[$i]][1][$n] = $GLOBALS['_tpl'][$this->preg[$this->pre[$i]][2][$n]];
    88. $query['tpl_template'] = "SELECT `inhalt` FROM `template` WHERE `name`='".$this->preg[$this->pre[$i]][1][$n]."'";
    89. $this->sql->db_query($query); unset($query);
    90. if (!is_string($this->preg[$this->pre[$i]][1][$n]))
    91. return $this->tpl_errmsg('Die Templatevariable <code>'.$this->preg[$this->pre[$i]][1][$n].'</code> ist leer oder nicht definiert!<br>');
    92. elseif (empty($this->sql->fetch['tpl_template']))
    93. return $this->tpl_errmsg('Die Template konnte in der Datenbank nicht gefunden werden!');
    94. else
    95. {
    96. if (array_search($this->pre[$i].'__'.$this->preg[$this->pre[$i]][1][$n],$this->pre)===false)
    97. $this->get[$this->pre[$i].'__'.$this->preg[$this->pre[$i]][1][$n]] = $this->sql->fetch['tpl_template'][0]['inhalt'];
    98. $this->pre[] = $this->pre[$i].'__'.$this->preg[$this->pre[$i]][1][$n];
    99. }
    100. }
    101. }
    102. }
    103.  
    104. // Ersetzen der pseudo-Variablen ( Variable: { VARNAME } )
    105. function tpl_edit_var()
    106. {
    107. for ($i=0;$i<count($this->pre);$i++)
    108. {
    109. preg_match_all('%{\$(.*)}%iU',$this->get[$this->pre[$i]],$preg);
    110. if (isset($preg[0]))
    111. {
    112. for ($n=0;$n<count($preg[0]);$n++)
    113. $count[$i][] = count($GLOBALS['_tpl'][$preg[1][$n]]);
    114. $max[$i] = (is_array($count[$i])) ? max($count[$i]) : 0;
    115. }
    116. $getbackup = $this->get[$this->pre[$i]];
    117. for ($n=0;$n<$max[$i];$n++) // Falls Arrays als Variablen gesetzt wurden
    118. {
    119. for ($m=0;$m<count($preg[0]);$m++)
    120. if (isset($GLOBALS['_tpl'][$preg[1][$m]]))
    121. if (is_array($GLOBALS['_tpl'][$preg[1][$m]]))
    122. $this->get[$this->pre[$i]] = str_replace($preg[0][$m],$GLOBALS['_tpl'][$preg[1][$m]][$n],$this->get[$this->pre[$i]]);
    123. else
    124. $this->get[$this->pre[$i]] = str_replace($preg[0][$m],$GLOBALS['_tpl'][$preg[1][$m]],$this->get[$this->pre[$i]]);
    125. else
    126. return $this->tpl_errmsg('Die Variable <code>'.$preg[1][$m].'</code> ( Template: <code>'.substr_replace($this->pre[$i],'',0,strrpos($this->pre[$i],__)).'.tpl.php</code> ) ist in <code>$GLOBALS</code> nicht zu finden!');
    127. if ($n!=($max[$i]-1))
    128. $this->get[$this->pre[$i]] = $this->get[$this->pre[$i]].$getbackup;
    129. }
    130. }
    131. }
    132.  
    133. // Einfügen der SubTemplates und PseudoSubTemplates ( SubTemplate: { TEMPNAME } PseudoSubTemplates: {!TEMPNAME} )
    134. function tpl_edit_tpl()
    135. {
    136. for ($i=count($this->pre);$i>=0;--$i)
    137. for ($n=0;$n<(count($this->preg[$this->pre[$i]][0]));$n++)
    138. $this->get[$this->pre[$i]] = str_replace($this->preg[$this->pre[$i]][0][$n],$this->get[$this->pre[$i].'__'.$this->preg[$this->pre[$i]][1][$n]],$this->get[$this->pre[$i]]);
    139. }
    140.  
    141. // Output
    142. function tpl_output()
    143. {
    144. #ob_start('ob_gzhandler');
    145. for($i=0;$i<count($this->template);$i++)
    146. echo $this->get[$this->template[$i]];
    147. #ob_end_flush();
    148. exit(0);
    149. }
    150.  
    151. // Fehlermeldungen
    152. function tpl_errmsg($errormsg)
    153. {
    154. if ($_SESSION['error']===true)
    155. {
    156. global $mailto;
    157. $errormsg = '<pre><b>Fehler in der Template Klasse</b><br><br>'.$errormsg.'<br>Bitte probieren sie es erneut oder wenden sie sich an <a href="mailto:'.$mailto['name'].'%20%3C'.$mailto['email'].'%3E?subject=Fehler%20bei%20den%20Templates&body=Fehler:%20'.text_emailcodierung($errormsg).'%0D%0ADatum:%20'.date('d.m.Y%20@%20H:i').'%0D%0AUrl:%20'.getenv('REQUEST_URI').'">'.$mailto['email'].'</a><br>';
    158. $errormsg .= '-----------------------------<br>';
    159. $errormsg .= '<b>Datum: </b>'.date('d.m.Y @ H:i').'<br>';
    160. $errormsg .= '<b>Url: </b>'.getenv('REQUEST_URI').'<br>';
    161. $errormsg .= '<b>Referer: </b>';
    162. (!getenv('HTTP_REFERER')) ? $errormsg .= 'unbekannt<br>' : $errormsg .= getenv('HTTP_REFERER').'<br>';
    163. echo $errormsg;
    164. exit(0);
    165. }
    166. else
    167. require (GLOBAL_PATH.'error.php');
    168. exit(0);
    169. }
    170. }
    171. ?>

    diese klasse muss jediglich initialisiert werden und läuft dann komplett ab, weshalb es auch das ende meiner scripte darstellt.

    der übergabewert ist die haupttemplate die ich haben will, in dieser template werden dann weitere gesucht und die variablen gefüllt ( sofern eine untergeordnete template variable werte hat oder templates laden will geht dies auch ).

    es gibt wie du siehst einmal die möglichkeit templates als von einer datei, oder von der datenbank zu laden.

    es können aber auch mehrere haupttemplates geben, diese müssen dann als array übergeben werden.

    sollte der wert einer variable ein array sein wird die template so oft wiederholt, wie lang der größte array innerhalb dieser te,plate ist ( bsp, ich habe 10mal die daten für die news und habe alle in einem array, dann wird die newstemplate 10 mal aufgerufen und immer mit dem nächsten wert gefüllt ).


    desweiteren kennt es 3 arten von wert übergaben

    {NAME} ruft eine template auf

    {$NAME} wird durch den wert einer Variabele ersetzt ( bzw gilt ein besonderes verhalten, wenn es ein array ist, hab ich ja oben erläutert )

    {!NAME} fragt den Wert dieser variable ab ( muss ein string sein ) und ruft dann die template auf, welche diesen wert als namen hat


    nunja, du wirst noch einige fragen habe, aber ich hoffe ich konnte schon ein paar wenige klären ( dies ist übeigens eine frühere version, ich bin etwas zimperlich meine aktuelle templateversion zu veröffentlichen )
    Geändert von Osbes (06.02.2006 um 15:34 Uhr)

  5. #5
    Ich will auch gar keine aktuelle, sondern nur eine halbwegs verständliche
    Zumindest die Funktion "tpl_errmsg" habe ich schonmal in Aktion gesehen

    Werd sie in den nächsten Tagen mal durchgehen.

  6. #6
    wobei dies eine ältere war ^^

    ich weiß nicht ob es für dich gleich verständlich ist, aber ich erkläre es gerne ( fremder code ist ja immer erstmal ungewöhnlich )

  7. #7
    Also ich muss sagen, die Klasse mit ihren Methoden ist schon sehr abstrakt Da wird das durchgehen wohl noch ne Weile dauern.

+ Antworten

Ähnliche Themen

  1. Templates
    Von FaTeD` im Forum Technik Ecke
    Antworten: 7
    Letzter Beitrag: 02.01.2005, 15:09
  2. php templates
    Von SUCKYSUCK_ im Forum Technik Ecke
    Antworten: 11
    Letzter Beitrag: 01.09.2004, 23:49
  3. UBZ Teamsystem online - Hilfen zum System
    Von MrYuRi im Forum United-BattleZone
    Antworten: 0
    Letzter Beitrag: 16.11.2003, 19:18
  4. Hilfen für Ra2/YR
    Von Steffen im Forum Alarmstufe Rot 2
    Antworten: 5
    Letzter Beitrag: 23.10.2003, 22:15
  5. Neue Styles / Templates : Orange-Style
    Von stefros im Forum United Talk
    Antworten: 31
    Letzter Beitrag: 22.10.2002, 20:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •