login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Overige scripts > Template Parser

Template Parser

Auteur: jeroentjuh - 05 maart 2006 - 19:27 - Gekeurd door: nemesiskoen - Hits: 8081 - Aantal punten: 3.33 (3 stemmen)



Ik heb mijn template parser iets of wat aagepast.

Changelog:
[5-3-2006]
- Eerste versie online gezet
[7-3-2006]
- Mogelijk tot blocks

Readme:

loadTemplate($templatefile){}
Deze functie laat het template bestand in.

assignBlock($blockname,$array_met_values) {}
Met deze functie kun je blocks toekennen
Blocks geef je zo aan in de content
[begin-block: naam]
Hier een steeds herhalend iets, bijvoorbeeld:
<tr><td>{naam}</td></tr>
Als je een lijstje met lede wilt laten zien.
[end-block: naam]
Zo moet de $array_met_values eruit zien:
Eén hoofdarray, met daarin voor iedere rij een nieuwe array
array( array('naam' => 'jan', 'leeftijd' => 45),
array('naam' => 'piet', 'leeftijd' => 36))

assignVar($var,$replacement) {}
Met deze functie wijs je een vervanging toe.
Je hebt bijvoorbeeld ergens in je template {koe} staan en wilt dit vervangen door Een koe is een dier dat melk geeft.
Dit doe je dan door:
assignVar('koe','Een koe is een dier dat melk geeft.');

assignVars($vars,$replacements) {}
Deze functie doet hetzelfde als assignVar(){} alleen dan moet je een array() opgeven met vars en replacements

assignIncludeContent($file) {}
Met deze functie kun je een bestand inladen, in de template moet staan:
[bestandsnaam], bijvoorbeeld: [nieuws.php]

parse($print) {}
Deze functie zorgt dat alles wat je hebt ingevoerd geparst wordt, je kunt een variabelen TRUE meegeven als je wilt dat ie gelijk echot, anders wordt de html code gereturnd.

clearSettings() {}
Met deze functie kun je de variabelen leegmaken, voor als je meerdere templates op een pagina wilt gebruiken.

Er zit een voorbeeld template bij (template.tpl). En een voorbeeld bestand (voorbeeld.php).

Code:
template.class.php
  1. <?php
  2. class templateParser {
  3. /* @desc In deze variabele wordt de hele file tijdelijk opgeslagen */
  4. public $code;
  5. /* @desc In deze variabele wordt alle data opgeslagen die te maken heeft met het vervangen van html
  6.   Blocks:
  7.   $_replacedata['block']['<naamvanblock>']['contentblock']; Hierin wordt opgeslagen wat tussen de [begin-block: <naamvanblock>] en [end-block: <naamvanblock>] staat.
  8.   $_replacedata['block']['<naamvanblock>'][<oplopend nummer>]['var']; hierin wordt de data opgeslagen.
  9.   Files:
  10.   $_replacedata['include'][] = <naamvanbestand>; hierin wordt de naam van de bestanden opgeslagen.
  11.   Vars:
  12.   $_replacedata['var']['<varnaam>']; Hierin worden de vars opgeslagen
  13.   */
  14. public $_replacedata;
  15.  
  16. /**
  17.   * @desc Deze functie laad de template in.
  18.   * @param string De link naar de template.
  19.   **/
  20. public function loadTemplate($tFile) {
  21. if(file_exists($tFile)) {
  22. $this->code = serialize(file_get_contents($tFile));
  23. } else {
  24. echo 'Couldn\'t load the template file.';
  25. }
  26. }
  27.  
  28. /*
  29. * @desc Met deze functie kun je blocks toevoegen.
  30. * @param string De naam van het block
  31. * @param array De data die erin geplaatst moet worden
  32. * Structuur:
  33. * array(
  34. * array('var' => 'waarde', 'anderevar' => 'waardes'),
  35. * array('var' => 'iets', 'anderevar' => 'ook iets')
  36. * );
  37. **/
  38. public function assignBlock($blockname,$array_met_values) {
  39. $block_content = $this->getContentInBlock($blockname);
  40. $this->_replacedata['block'][$blockname] = $array_met_values;
  41. $this->_replacedata['block'][$blockname]['contentblock'] = $block_content;
  42. }
  43.  
  44. /**
  45. * @desc Met deze functie kun je één enkele replacement toevoegen
  46. * @param string De tekst in de content
  47. * @param string Waarmee het vervangen moet worden
  48. **/
  49. public function assignVar($var,$value) {
  50. $this->_replacedata['var'][$var] = $value;
  51. }
  52.  
  53. /**
  54. * @desc Met deze functie kun je meerdere replacements toevoegen dmv een array mee te geven
  55. * @param array een array met vars
  56. * @param array een array met replacements
  57. **/
  58. public function assignVars($vars,$replacements) {
  59. if(!is_array($vars) || !is_array($replacements)) {
  60. $this->assignVar($vars,$replacements);
  61. } else {
  62. for($i=0; $i < count($vars); $i++) {
  63. $this->_replacedata['var'][$vars[$i]] = $replacements[$i];
  64. }
  65. }
  66. }
  67.  
  68. /**
  69. * @desc Met deze functie kun je een include toevoegen
  70. * @param string het bestand dat je wilt includen
  71. **/
  72. public function assignIncludeContent($filename) {
  73. if(file_exists($filename)) {
  74. $this->_replacedata['include'][] = $filename;
  75. }
  76. }
  77.  
  78. /**
  79. * @desc Met deze functie parse je de content
  80. * @param boolean moet de content gelijk worden ge-echod of niet
  81. * @return string optioneel: de content teruggeven
  82. **/
  83. public function parse($display = FALSE) {
  84. $code = unserialize($this->code);
  85. //de blocks verwerken
  86. if(is_array($this->_replacedata['block'])) {
  87. foreach($this->_replacedata['block'] as $blockname => $values) {
  88. $contentblock = $values['contentblock'];
  89. $block_output = '';
  90. for($i = 0; $i < (count($values) - 1);$i++) {
  91. $rij = $contentblock;
  92. foreach($values[$i] as $var => $replacement) {
  93. $rij = str_replace('{'.$var.'}',$replacement,$rij);
  94. }
  95. $block_output .= $rij;
  96. }
  97. $code = $this->replaceBlock($blockname,$block_output,$code);
  98. }
  99. }
  100. //de vars verwerken
  101. if(is_array($this->_replacedata['var'])) {
  102. foreach($this->_replacedata['var'] as $key => $value) {
  103. $code = str_replace('{'.$key.'}',$value,$code);
  104. }
  105. }
  106. if(is_array($this->_replacedata['include'])) {
  107. foreach($this->_replacedata['include'] as $file) {
  108. $contents_file = file_get_contents($file);
  109. $regex = "(\[file: ".$file."\])";
  110. $code = ereg_replace($regex,$contents_file,$code);
  111. }
  112. }
  113. if($display) {
  114. echo $code;
  115. } else {
  116. return $code;
  117. }
  118. }
  119.  
  120. /**
  121. * @desc Deze functie haalt de content tussen de [begin-block: ][end-block: ] vandaan
  122. * @param string Naam van het block
  123. * @return string De content uit het block
  124. **/
  125. public function getContentInBlock($blockname) {
  126. $regex = "(.*)(\[begin-block: ".$blockname."\])(.*)(\[end-block: ".$blockname."\])(.*)";
  127. return ereg_replace($regex,"\\3",unserialize($this->code));
  128. }
  129.  
  130. /**
  131. * @desc Deze functie vervangt de het block door de content die erin moet
  132. * @param string de naam van het block
  133. * @param string de content die erin moet
  134. * @param string de hele content waarin het vervangen moet worden
  135. * @return string de nieuwe content
  136. **/
  137. public function replaceBlock($blockname,$output,$code) {
  138. $regex = "(\[begin-block: ".$blockname."\])(.*)(\[end-block: ".$blockname."\])";
  139. return ereg_replace($regex,$output,$code);
  140. }
  141.  
  142. /**
  143. * @desc Deze functie roept de __destruct functie aan
  144. **/
  145. public function clearSettings() {
  146. $this->__destruct();
  147. }
  148.  
  149. /**
  150. * @desc Deze functie maakt de variabelen leeg
  151. **/
  152. public function __destruct() {
  153. $this->_replacedata = '';
  154. $this->code = '';
  155. }
  156.  
  157. }
  158. ?>


template.tpl
  1. <html>
  2. <head>
  3. <title>{titel}</title>
  4. </head>
  5. <body>
  6. <h1>{kop}</h1>
  7. <table>
  8. <tr>
  9. <td>ID:</td>
  10. <td>Naam:</td>
  11. <td>Email:</td>
  12. </tr>
  13. [begin-block: leden]
  14. <tr>
  15. <td>{id}</td>
  16. <td>{naam}</td>
  17. <td>{email}</td>
  18. </tr>
  19. [end-block: leden]
  20. </table><br />
  21.  
  22. [file: footer.php]
  23. </body>
  24. </html>


footer.php
  1. Dit is de footer die op iedere pagina getoont wordt.


voorbeeld.php
  1. <?php
  2. include('tp.class.php');
  3. $tp = new templateParser();
  4. $tp->loadTemplate('template.tpl');
  5. $array_data = array();
  6. $array_data[] = array('id' => 1, 'naam' => 'jan', 'email' => 'jan@info.nl');
  7. $array_data[] = array('id' => 2, 'naam' => 'karel', 'email' => 'geenemail@nomail.org');
  8. $array_data[] = array('id' => 3, 'naam' => 'piet', 'email' => 'piet@onzin.nl');
  9. $tp->assignBlock('leden',$array_data);
  10. //$tp->assignVar('kop','Dit is de kop');
  11. //$tp->assignVar('titel','Titel van de pagina');
  12. //of:
  13. $tp->assignVars(array('kop','titel'),array('Dit is de kop','Titel van de pagina'));
  14. $tp->assignIncludeContent('footer.php');
  15. $tp->parse(TRUE);
  16. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (5)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.052s