Właśnie próbuje napisać mały system szablonów.

Naskrobałem coś takiego:

  1. <?php
  2. class template {
  3. private $str;
  4. private $vars = array();
  5.  
  6. public function load( $file_name ) {
  7. if( $file_name ) {
  8. $this -> str = file_get_contents( $file_name );
  9. } else {
  10. throw new Exception('Brak nazwy pliku szablonu');
  11. }
  12. }
  13.  
  14. public function vars( $keys ) {
  15. foreach( $keys as $key => $value ) {
  16. $key = '{'.$key.'}';
  17. $this -> vars[$key] = $value;
  18. }
  19. }
  20.  
  21. public function display() {
  22. if (sizeof($this -> vars) > 0) {
  23. $keys = array_keys( $this -> vars );  
  24.  
  25. foreach ( $keys as $current_key ) {
  26. $this -> str = str_replace($current_key, $this -> vars[$current_key], $this -> str);
  27.  }
  28. }
  29.  
  30. echo( $this -> str ); 
  31. }
  32. }
  33. ?>


i działa to tak
  1. <?php
  2. try {
  3.  
  4. $tpl = new template;
  5.  
  6. $tpl->load('plik.tpl');
  7.  
  8. $tpl->vars(array(
  9. 'title' => 'Tak to ja',
  10. ));
  11.  
  12. $tpl->display();
  13.  
  14. } catch(Exception $e) {
  15. die( $e->getMessage() );
  16. }
  17. ?>


Jednak potrzebuje metody, która obsłuży dane w while().

Widzę to mniej więcej tak jak w phpBB, czyli
plik php
  1. <?php
  2. while( $row = cos tutaj ) {
  3. $tpl->loop_vars('news', array(
  4. 'title' => $row['title']
  5. ));
  6. }
  7. ?>


i html
  1. <!-- BEGIN news -->
  2. {news.title}
  3. <!-- END news -->


Pozdrawiam