Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php+html] Obsługa prymitywnego szablonu
Louner
post
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 20.06.2005
Skąd: Bielsk Podlaski

Ostrzeżenie: (0%)
-----


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ć? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Z góry bardzo dziękuję za odpowiedź.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Tak się sklada, że właśnie pracuję na prostym systemem szablonów do własnego frameworka - wymyślam koło na nowo (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Z własnych doświadczeń wiem, że wyrażenia regularne nie należą do demonów szybkości (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
Louner
post
Post #3





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 20.06.2005
Skąd: Bielsk Podlaski

Ostrzeżenie: (0%)
-----


Wydaje mi się, że wiem o co chodzi. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Dziękuję za odpowiedź.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 06:15