Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+html] Obsługa prymitywnego szablonu
Forum PHP.pl > Forum > PHP
Louner
Witam.

Mam kilka pytań odnośnie bardzo prymitywnej obsługi szablonów.
  1. Czy preg_replace jest optymalnym sposobem na zamianę dowolnego ciągu znaków w pliku szablonu na inny? Zakładajac, że chcę zamienić ciąg znaków typu {TEKST} na jakąś zmienną ze sporym kawałkiem treści ( ok. 3 kb znaków ).
  2. Czy jest jakiś bardziej sensowny sposób na wydobycie treści spomiędzy {TAKICH}{/TAGÓW} i zamianę ją na inną niż wczytać przy pomocy preg_replace wszystko to co jest przed nimi, wszystko co jest za nimi i odpowiednio wyświetlić? smile.gif

Z góry bardzo dziękuję za odpowiedź.
batman
Tak się sklada, że właśnie pracuję na prostym systemem szablonów do własnego frameworka - wymyślam koło na nowo winksmiley.jpg Z własnych doświadczeń wiem, że wyrażenia regularne nie należą do demonów szybkości winksmiley.jpg.
Oczywiście, jeśli wykonasz buforowanie szablonów, wówczas wyrażenia regularne będą sie wykonywać co jakiś czas, więc na wydajności raczej nie stracisz. W moim "systemie szablonów" zastosowałem nieco inne podejście. Zmienne przypisane do szablonu zapisuję do tablicy. Następnie wczytuję ten szablon przez require_once. Zanim to zrobię, uzywam funkcji extract. Dzięki temu wszystkie klucze tablicy traktowane są jako zmienne i wczytywane do szablonu. A jak zrobić, by zawartość szablonu nie wyświetlała się w przeglądarce? Output buffering.

Poniżej zamieszciłem kod jak to robię. Niestety nie mam dostępu do ftp, na ktorym znajduje się aktualna wersja z buforowaniem do pliku.

  1. <?php
  2. /**
  3.  * Klasa bardzo prostych szablonow
  4.  */
  5. class Template
  6. {
  7. /**
  8.  * Tablica zmiennych globalnych - dotyczacych wsztstkich szablonow
  9.  *
  10.  * @var array
  11.  */
  12. protected $aglobalvars = array();
  13.  
  14. /**
  15.  * Tablica zmiennych lokalnych - dotyczacych konkretnego szablonu
  16.  *
  17.  * @var array
  18.  */
  19. protected $atemplatesglobalvars = array();
  20.  
  21. /**
  22.  * Tablica szablonow
  23.  *
  24.  * @var array
  25.  */
  26. protected $atemplates = array();
  27.  
  28. public function Load($sname, $sfile) {
  29. $this->atemplates[$sname] = $sfile;
  30. }
  31.  
  32. public function Display($sname) {
  33. if(!array_key_exists($sname, $this->atemplates)) throw new TemplateException('There is no '.$sname.' template');
  34. if(is_array($this->aglobalvars)) extract($this->aglobalvars);
  35. if(is_array($this->atemplatesglobalvars[$sname])) extract($this->atemplatesglobalvars[$sname]);
  36. require_once TEMPLATE_PATH.$this->atemplates[$sname];
  37. }
  38.  
  39. /**
  40.  * Przypisanie zmiennej globalnej do szablonu
  41.  *
  42.  * @param string $sname nazwa zmiennej
  43.  * @param mixed $svalue wartosc zmiennej
  44.  */
  45. public function AssignGlobalVariable($sname, $svalue) {
  46. $this->aglobalvars[$sname] = $svalue;
  47. }
  48.  
  49. /**
  50.  * Przypisanie zmiennej lokalnej do szablonu
  51.  *
  52.  * @param string $stemplate nazwa szablonu, do ktorego przypisywana jest zmienna
     
  53.  * @param string $sname nazwa zmiennej
  54.  * @param mixed $svalue wartosc zmiennej
  55.  */
  56. public function AssignTemplateVariable($stemplate, $sname, $svalue) {
  57. if(!is_array($this->atemplatesglobalvars[$stemplate]))
  58. $this->atemplatesglobalvars[$stemplate] = array();
  59.  
  60. $this->atemplatesglobalvars[$stemplate][$sname] = $svalue;
  61. }
  62. }
  63.  
  64. ?>
Louner
Wydaje mi się, że wiem o co chodzi. winksmiley.jpg Dziękuję za odpowiedź.
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.