Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Uzupełnianie przygotowanego szablonu
Forum PHP.pl > Forum > PHP
karcheus
Mam pytanie dotyczące pomysłu na zbudowanie skryptu php, który będzie generował stronę html na podstawie danych wczytanych z bazy danych sql oraz przygotowanego szablonu.
Ja to widzę tak:
- przygotuję plik php, który odczyta z bazy danych dane
- odczytane dane chciałbym wprowadzić do szablonu, który przygotowałem w osobnym pliku html
- w rezultacie nie muszę mieszać w jednym pliku php treści html oraz skryptów php
- szablon html miałby jakieś frazy np "%imie%" które zastąpię wczytanym rekordem z bazy danych sql
Nie wiem czy ta koncepcja jest dobra dlatego wszelkie uwagi są mile widziane.
viking
Odkryłeś podstawy większości systemów smile.gif
Zamiast tworzyć własny pseudo system szablonów wykorzystaj jakiś gotowy np. PHPTAL, Twig, Smarty czy inne.
Do bazy danych połącz się najlepiej za pomocą PDO.
karcheus
Nie chciałbym instalować żadnych dodatków. Pytam o najprostszą koncepcję przy użyciu języka PHP. W sumie chyba file_get_contents() i str_replace() powinno wystarczyć . Do PHP łącze się przez PDO
viking
Robienie czegoś tak prostego IMO mija się z celem. Po pierwsze dlatego że nie dodasz cache więc będzie to działać nawet wolniej. Po drugie zwykłe echo danych z bazy wystarczy.
JoShiMa
Odkrywanie ameryki. No ale jak już bardzo chcesz zobaczyć jak to się robi, żeby miało ręce i nogi. Weź sobie jakieś frameworki i zobacz jak to w nich jest rozwiązane. Poczytaj dokumentację np Smarty i zobacz jak tam wstrzykuje się dane do szablonu.
session
Tak jak pisał @viking nie ma najmniejszego sensu wyważać otwartych drzwi, są już gotowe rozwiązania takie tak Smarty, ktoś już wpadł na ten sam pomysł i go zrealizował wink.gif Możesz zobaczyć, że użycie tego jest proste w dokumentacji.

Cytat
Nie chciałbym instalować żadnych dodatków.

A jaka to różnica czy dodasz swój własny skrypt, czy gotowy tongue.gif Poza tym "instalujesz" tylko u siebie, a wrzucasz już wygenerowane szablony, chyba że chcesz zachować dynamikę niektórych zmiennych to wtedy zostawiasz echo.

Cytat
Pytam o najprostszą koncepcję przy użyciu języka PHP.

Jeśli dalej nie jesteś przekonany wink.gif

  1. function generateTpl($file, $data){
  2.  
  3. // Tworzysz nowy plik wynikowy, możesz też po prostu wyświetlać kolejne linie (echo)
  4. $tp = fopen($file, "wb");
  5.  
  6. // Czytasz kolejne linie szablonu
  7. $fd = fopen('templates/'.$file, "r");
  8. if($fd && $tp){
  9. while(!feof($fd)){
  10. $line = fgets($fd);
  11.  
  12. // RegExem wstawiamy "zmienne" z tablicy
  13. $new = preg_replace_callback('/\{\$(\w+)\}/', function($m) use (&$data){return $data[$m[1]];}, $line);
  14.  
  15. // Wypełniamy nowy plik
  16. fwrite($tp, $new);
  17. }
  18. fclose($fd);
  19. fclose($tp);
  20. }else{
  21. return false;
  22. }
  23. }


Zamianę wykonuje preg_replace_callback (min. PHP 5.3.0), wzorcem określasz w jaki sposób zmienne są umieszczane w szablonie, ja wzorowałem się na smarty, więc /\{\$(\w+)\/ to np. {$foo} (większość znaków ma specjalne znaczenie dlatego poprzedzone są \ ). Jeśli zastanawiałoby Cie użycie use, może przykład to wyjaśni.

Do funkcji jako drugi parametr przekazujesz tablicę asocjacyjną, gdzie klucze są nazwami zmiennych. Jeśli chcesz pobierać dane z bazy do tworzenia szablonu, najlepiej jeśli nie będziesz tworzył każdego pola jako osobną zmienną i w rezultacie przechowywał jeden rekord z ogromną ilością pól tylko tworzysz pola name oraz value, każdy rekord to kolejna zmienna. Później wypełniasz tablicę $data[$row['name']] = $row['value'];
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.