Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Uzupełnianie przygotowanego szablonu
karcheus
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 18.06.2016

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


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.

Ten post edytował karcheus 18.06.2016, 11:06:46
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Odkryłeś podstawy większości systemów (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
karcheus
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 18.06.2016

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


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
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #5





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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.
Go to the top of the page
+Quote Post
session
post
Post #6





Grupa: Zarejestrowani
Postów: 112
Pomógł: 22
Dołączył: 11.04.2010
Skąd: Tarnów

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


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ł (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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'];

Ten post edytował session 19.06.2016, 11:35:42
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: 22.08.2025 - 22:01