Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][OOP]Prosty system szablonów, Problem z wczytaniem treści
webmaniak
post
Post #1





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Witam,
znalazłem w necie prosty system szablonów. Po małych przeróbkach klasa wygląda tak:
  1. <?php
  2.  
  3. class Lay
  4. {
  5. public $render;
  6.  
  7. public function render($plik, $tablica)
  8. {
  9. $this->render=file_get_contents("template/".$plik.".tpl"); //Wczytanie zawartości pliku
  10. foreach($tablica as $t => $content)
  11. {
  12. $this->render=str_replace("{".$t."}", $content, $this->render); //Podmiana {} na normalny tekst
  13. }
  14.  
  15. $this->render=preg_replace('({(.*?)})', "", $this->render); //Usuwanie wszystkich słów kluczowych, które nie zostały podmienione
  16. return $this->render;
  17. }
  18.  
  19.  
  20.  
  21. public function __desctruct()
  22. {
  23. unset($this->render); //Usuwanie zmiennej
  24. }
  25. }
  26. ?>


Natomiast wywołanie wygląda tak:
  1. <?php
  2.  
  3. include_once "klasa.php";
  4. $szablon = new Lay();
  5.  
  6. $dane1 = array('link1'=>'index.php?page=rejestracja');
  7. $dane2=$szablon->render("logowanie", $dane1);
  8.  
  9. $dane3=array('logowanie'=>$dane2, 'menu_lewe'=>'menu lewe');
  10. echo $szablon -> render("index", $dane3);
  11. ?>



A plik index.tpl wygląda tak:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4.  
  5. </head>
  6.  
  7. <div id="strona">
  8. <div id="nawigacja">
  9. {logowanie}
  10. ...
  11. </div> <!--nawigacja-->
  12. <div id="naglowek">
  13. ...
  14. </div><!--nagłówek-->
  15. <div id="zawartosc">
  16. <div id="lewa_kolumna">
  17. <div class="margines">
  18. <div class="menu_left">
  19. {menu_lewe}
  20. </div><!--menu_left-->
  21. </div><!--margines-->
  22. </div><!--lewa_kolumna-->
  23. <div id="tresc_strony">
  24. <div class="margines">
  25. {content}
  26. </div><!--margines-->
  27. </div><!--tresc_strony-->
  28. <div id="prawa_kolumna">
  29. <div class="margines">
  30. <div id="modul">
  31. {menu_prawe}
  32. </div><!--modul-->
  33. <div class="modul">
  34. </div><!--margines-->
  35. </div><!--prawa kolumna-->
  36. </div><!--zawartosc-->
  37. <div id="stopka">
  38. ...
  39. </div><!--stopka-->
  40. </div><!--strona-->
  41. </body>
  42. </html>

Czyli sprawa wygląda tak, że wczytywany jest plik .tpl, następnie tworzona jest zmienna w której zostają podane dane które mają zostać podmienione za {} w innym pliku(w zmiennej $dane2 jest to plik logowanie.tpl). Do tego momentu wszystko jest ok. Jednak chciałbym zrobić żeby w miejsce {content} zamiast kolejnego pliku *.tpl wczytywało mi jakiś plik php w którym umieszcze switch, sterujący zawartością. I tu mam problem bo nie wiem jak to zrobić. Próbowałem:
  1. public function rend($plik)
  2. {
  3. $this->rend=file_get_contents("template/".$plik.".php"); //Wczytanie zawartości pliku
  4. return $this->rend;
  5. }

Czyli analogicznie tylko że plik php. Jednak to nie działa. Nie wyskakuje błąd, ale też nic się nie dzieje.
Próbowałem też:
  1. public function rend($plik)
  2. {
  3. require ("template/".$plik.".php"); //Wczytanie zawartości pliku
  4. return $this->rend;
  5. }

No i to działa ale wczytuje mi zawartość strony zamiast w {content}, to na samej górze.
Jak sobie z tym poradzić? Może ktoś pomóc, naprowadzić na rozwiązanie tego problemu??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Weź to wywal i użyj albo czystego PHP albo jakiegoś gotowego, rozbudowanego systemu szablonów. One mają to do siebie, że aby miały jakikolwiek sens muszą być rozbudowane inaczej jedynie utrudniają życie.
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 02:16