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

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.09.2025 - 09:09