Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z systemem szablonów
Forum PHP.pl > Forum > PHP
batat
Witam,
Od 3 dni usiłuję sklecić, przerobić, ściągnąć jakikolwiek system szablonów, który pomógłby mi zrobić szkielet stronki. Testowałm już kilka klas, próbowałem też prostych, gotowych systemów. Jednak nic nie działa tak jak chce. Jedyne do czego doszedłem to podmiana jakiejść treści na drugą, ale jak tu oddzielić kod php od html o czym tak głośno wszyscy piszą, mówiąc o szablonach, to nie wiem ;/ dla przykładu mam taką klasę:

  1. <?php
  2. class template
  3. {
  4. private $root;
  5. private $uncompiled;
  6. private $compiled;
  7. private $vars;
  8.  
  9. public function __construct($root)
  10. {
  11. if(is_dir($root))
  12. {
  13. $this->root = $root;
  14. }
  15. }
  16.  
  17. public function load($file)
  18. {
  19. if(file_exists($this->root.$file.'.tpl'))
  20. {
  21. $this->uncompiled = file_get_contents($this->root.$file.'.tpl');
  22. }
  23. }
  24.  
  25. public function assign($key, $value)
  26. {
  27. $this->vars[$key] = $value;
  28. }
  29.  
  30. public function compile()
  31. {
  32. preg_match_all('#{([_a-zA-Z0-9]+)}#i', $this -> uncompiled, $found);
  33. $blockNames = $blockValues = array();
  34. foreach($found[1] as $var) {
  35. if(isset($this->vars[$var]))
  36. {
  37. $blockNames[] = '{'.$var.'}';
  38. $blockValues[] = &$this->vars[$var];
  39. }
  40. }
  41. echo str_replace($blockNames, $blockValues, $this -> uncompiled);
  42. }
  43. }
  44. ?>


której używam tak:

  1. <?php
  2. $szablon = new template('katalog/skinow/');
  3. $szablon -> load('szablon');
  4. $szablon -> assign('forum', 'tutaj to co sie pojawia za forum');
  5. $szablon -> compile();
  6. ?>


i jak na razie działanie tego całego kolosa ogranicza się do zamiany taga {forum} na tekst "tutaj to co sie pojawia na forum". Ale ja chce zamiast tego tekstu zainkludować plik .php odpowiedzialny za pobieranie tematów z forum. To tylko przykład. Chodzi mi o to, że przy zamianie tagów chce zrobić inkludy. Mi już ręce opadają smile.gif Mam nadzieję, że pomożecie smile.gif

p.s. chciałem jeszcze dodać, że raczej nie znam się na obiektówce snitch.gif jedynie jakieś proste poprawki umiem zrobić ;/
domis86
jezeli chces zincludowac plik php no to i tak nie oddzielasz kod php od html bo musi sie i tak wykonac ten zaincludowany.

W ogole ja nie widze sensu tego typu szablonow a la smarty - wolne i niepotrzebne.
najlepsze są zwykle szablony czyli HTML + echa phpowe
batat
niby tak, ale stronę już mam gotową i chce to tylko trochę przerobić. dodatkowo wykorzystuje 2 szablony e 2 wersjach kolorystycznych, więc trochę nie chce mi się bawić z echo ;-)
domis86
nie musisz pisac echo smile.gif

zamiast:
  1. <? echo $x; ?>

mozna dac:
  1. <?=$x;?>

aarambo.gif
eai
  1. <?php
  2.  include 'tematy_z_forum.php';
  3.  $tematy_z_forum = ob_get_contents();
  4.  
  5.  
  6. $szablon = new template('katalog/skinow/');
  7. $szablon -> load('szablon');
  8. $szablon -> assign('forum', $tematy_z_forum);
  9. $szablon -> compile();
  10. ?>


Nie wiem czy o to Ci chodziło?
batat
właśnie o to chodziło ;-) Tylko teraz jeszcz jedno pytanie, czy da się jakoś to zrobić łądniej/krócej bo takich plików do includowania mam kilkanaście ;-) no i trochę uciążliwe i niezbyt ergonomiczne chyba byloby cały czas powtarzanie tego kodu ;]
eai
  1. <?php
  2. function GetContentFromInclude($file)
  3. {
  4.  ob_start();
  5. include $file;
  6. $content = ob_get_contents();
  7.  
  8.  return $content;
  9. }
  10. ?>


  1. <?php
  2. $szablon = new template('katalog/skinow/');
  3. $szablon -> load('szablon');
  4. $szablon -> assign('forum', GetContentFromInclude('tematy_z_forum.php'));
  5. $szablon -> assign('newsy', GetContentFromInclude('news.php'));
  6. $szablon -> compile();
  7. ?>
batat
Że też o tym nie pomyślałem biggrin.gif Wszystko śmiga tak jak chciałem, wielkie dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.